命名规则:registry/用户名/imageName:version
前外后内
docker images
docker rmi 镜像
rm 容器
docker ps
docker pull
docker run -d -p 80:80 -v path:cpath nginx //后台运行镜像
-p 宿主机端口:容器 (先外后内)端口映射
-V 宿主机目录:容器内目录 绑定挂载
命名卷挂载
docker volume create nginx_html //
docker run -d -p 80:80 -v nginx_html:cpath nginx //后台运行镜像 镜像的目录的内容同步到宿主机的挂载卷目录
docker volume rm/remove
docker volume list
docker volume prune -a // 删除没有容器使用的卷
docker volume inspect nginx_html
名字等价于id
docker run -d -p 80:80 -v nginx_html:cpath \
--name my_nginx nginx \
-e MONGO_= tech \
-- network network1 \ 因为先创建了一个叫network1的子网
-- network host \ 采用host模式的网络
nginx
-it 允许交互
--rm 容器停止时,删掉容器。用于临时调试
--restart 配置重启策略 always、unless-stopped (手动不重启)
docker inspect 容器 // 查看容器的信息
docker ps -a // 查看所有容器,包含停止的
docker start
docker stop
docker create // 只创建容器,但不启动
docker run // 创建容器,启动
docker logs
cat /etc/os-release // 查看linux版本
Dockerfile: 制作镜像的图纸
第一行为from , 从哪个镜像开始
workdir /app
copy . .
expose 8000 ,用来声明,无实质
cmd ["python3","main.py"]容器运行时的默认启动命令
entrypoint ["python3","main.py"]entrypoint 比 cmd 优先级更高,不容易被覆盖。
docker build -t hjzhu/testProject[:version] . 最后的.是在当前文件夹构建;要是想推上去,需要遵守命名规则
docker push hjzhu/testProject[:version]
docker login
网络
容器网络与宿主机得网络是隔离的。容器1...3可以互通,默认172.17开头
bridge 默认
docker network create network1 // 创建一个叫network1的子网。同一个子网的容器也可以使用名字进行通信。自定义的bridge自带dns解析,可以把容器名解析为ip;子网内部有dns机制
host网络模式:容器的端口直接运行在宿主机得端口上,用宿主机的ip和端口就可以访问到容器
docker network list 查看可用的网络。默认的3中无法删除(none,无网络模式)
docker compose
默认创建一个子网,一个compose文件中的所有容器默认是相同的子网。
可以定义启动顺序。 depends_on:
可以把docker命令告诉ai,让他给生成compose文件。
新版的docker自带docker compose,但是老版的装一下。
vi docker-compose.yaml
docker compose [-f 文件路径] up -d // 标准文件名可以防止多次启动
docker compose down -d 停止+删除
docker compose stop
docker compose start
dockerfile
FROM openjdk:11-jre-slim
# 自动创建 /app 目录
WORKDIR /app
ADD target/*.jar app.jar
EXPOSE 8010
ENV LANG=C.UTF-8 \
TZ=Asia/Shanghai \
JAVA_OPTS="-Dfile.encoding=UTF-8" \
JAVA_PROFILE="--spring.profiles.active=dev"
CMD ["sh","-c","java $JAVA_OPTS -jar app.jar $JAVA_PROFILE"]