windows 环境
Docker Desktop + WSL2
需要注意:
- 启用 Hyper-V
- 启用硬件虚拟化
常用命令
核心概念
C/S 架构
镜像
将 应用程序 和 相关资源,打包在一个 image 里面
镜像 可以看成是 容器 的 模板
容器
运行镜像,生成容器。容器可以 创建、启动、停止、暂停,删除。
仓库
基础信息
docker version
docker info
基础操作
# 登录 docker 仓库
docker login -u [账号] -p [密码] [仓库地址:端口]
# tag 打标签,重命名
docker tag [本地镜像名称] [仓库镜像名称]
docker tag demo:1.1.0 xxx.com/golang/demo:v1.1.0
# 推送到远程仓库
docker push xxx.com/golang/demo:v1.1.0
镜像操作
# 构建镜像
docker build -t [镜像名称] . [参数]
# 参数说明
# -f 指定 Dockerfile 路径。如果是 . 则使用当前目录下的 Dockerfile
# --build-arg=[] 设置镜像创建时的变量
# 查看镜像
docker images
docker images [镜像名称]
# 搜索镜像
docker search [镜像名称]
# 下载镜像
docker pull mysql
docker pull mysql:5.7
# 推送镜像 - 需要先登录
docker push [镜像名称]
# 删除镜像
docker rmi [镜像ID]
容器操作
# 运行容器
docker run [参数] [镜像名称]
# 参数说明
# --name=容器名字
# -d 后台运行
# -it 使用交互方式运行,可以进入容器查看内容
# -p 小写 p, 指定端口, 并处理宿主机端口映射。如 -p 主机端口:容器端口。
# -P 大写 P, 随机端口
# 查看正在运行的容器
docker ps [参数]
docker container ps [参数]
# 参数说明
# -a 显示所有容器
# -n=? 显示最近创建的 n 个容器
# -q 只显示容器的编号
# 格式化
docker ps --format "{{.ID}}: {{.Names}}: {{.Ports}}"
# 进入容器
docker exec -it [容器名称] /bin/bash
# 启停容器
docker start [容器ID] # 启动容器
docker restart [容器ID] # 重启容器
docker stop [容器ID] # 停止容器
docker kill [容器ID] # 强制停止容器
# 删除容器。不能删除正在运行的容器,强制删除使用 rm -f
docker rm [容器ID]
# 查看容器内部输出
docker logs -f [容器ID]
# 导入导出容器
docker export
docker import
# 从容器创建一个新的镜像
docker commit -a "作者" -m "提交信息" [容器ID] [镜像名称]
# save + load 也可以用来导入导出容器
docker save -o xxx.tar [镜像名称]
docker load
# 退出容器
exit
ctrl + P + Q # 容器不停止退出 -- 很有用
其他常用命令
# 查看容器中进程信息
docker top [容器名称]
# 查看容器磁盘占用信息
docker system df
# 数据卷命令
docker -v [主机目录:容器目录]
# 清除没有名字的 image 和 container
docker image prune
docker container prune
Dockerfile
基础命令
FROM # 指定基础镜像
WORKDIR # 设置后续指令的工作目录
RUN # 执行命令
CMD # 指定容器创建时的默认命令(可以覆盖)
ENTRYPOINT # 设置容器创建时的主要命令(不可覆盖)
ADD # 将 文件、目录或远程URL 复制到镜像中
COPY # 将文件或目录复制到镜像中
VOLUME # 为容器创建数据挂载卷
EXPOSE # 容器运行时,监听的端口
ENV # 设置环境变量。可以在后续指令中使用
ARG # 接收 docker build 时 --build-arg 设置的参数
使用技巧
1. Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
以下写法,会创建 3 层镜像
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
可以改成使用 && 符号连接,这样,就只会创建 1 层镜像
FROM centos
RUN yum -y install wget
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
&& tar -xvf redis.tar.gz
2. 给容器添加 bash
Docker Compose
基础命令
docker-compose up
docker-compose ps
docker-compose stop
docker-compose down