本文是记录常用的docker
命令的笔记,尽量使用简单的文字介绍docker
命令。所有操作仅在CENTOS7上测试过,但是docker
命令是通用的,不同的是配置文件目录位置或者系统命令。
docker 镜像相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # 直接从docker hub镜像源下载镜像 docker pull <镜像名称> e. docker pull mysql:5.6.40 # 列出镜像信息 docker images # 添加镜像标签,实际上镜像标签指向的是原镜像文件 docker tag <镜像名称> <tag名称> e. docker tag ubuntu:latest myubuntu:latest # 获取镜像所有信息 docker inspect <镜像名称> # 查看镜像历史 docker history <镜像名称> # 搜所镜像 docker search <搜索名称> e. docker search -s 3 nginx # 星级3以上的镜像 # 删除镜像 docker rmi <镜像标签或者ID> e. docker rmi myubuntu:latest # 不会删除 ubuntu:latest 原始镜像 e. docker rmi -f myubuntu:latest # 强行删除 # 创建镜像 docker commit <容器标签或者ID> e.docker commit -a "作者" -m "这是一个, 提交消息" <容器ID> <新的镜像名以及标签> # 操作系统模板导入,可以直接从OPENVZ模板导入。 # http://open-vz.org/Download/templates/precreated docker import <文件名> e. cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04 # 存出和导入镜像 docker save -o <存出文件名> <镜像名称> e. docker save -o ubuntu_14.04.tar ubuntu:14.04 docker load --input <导入文件名> docker load < <导入文件名> e. docker load --input ubuntu_14.04.tar e. docker load < ubuntu_14.04.tar # 上传镜像 docker push <镜像标签或者ID>
|
docker 容器相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # 创建一个容器,容器创建后处于停止状态 docker create -it <镜像名称> # 启动容器 docker start <容器名称或者ID> # 新建并启动容器 docker run -it ubuntu /bin/bash # 交互 docker run -d ubuntu /bin/echo 'Hello World' # 后台运行 # 终止运行 docker stop <容器名称或者ID> docker kill <容器名称或者ID> # 强行终止 # 重启容器 docker restart <容器名称或者ID> # 进入容器 docker attach <容器名称或者ID> # 这样进入容器,多个终端时候会同步显示 docker exec -it <容器名称或者ID> /bin/bash # 推荐使用的方式 # 使用nsenter进入容器 nsenter --target <pid> --mount --uts --ipc --net --pid # 删除容器 docker rm <容器名称或者ID> e. docker rm -f abc # 强制删除 e. docker rm -l abc # 删除容器链接,但是保留容器 e. docker rm -v abc # 删除容器挂载的容器卷 # 导入导出容器 docker export -o <导出文件> <导出容容器名称或者ID> docker import <导入文件> - test/ubuntu:v1.0
|
docker 私有仓库相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 搭建本地私有仓库,默认会把仓库文件存放在 `/tmp/registry` 可以通过-v挂载,把文件存储在本地 docker run -d -p 5000:5000 registry docker run -d -p 5000:5000 -v /path/to/local/reg:/tmp/registry registry # 上传镜像,先标记在提交 docker tag ubuntu:14.04 <HOST_IP>:5000/test docker push <HOST_IP>:5000/test
# 默认情况下远程必须使用https连接才能进行推送,或者配置ssl或者按照如下任意一种方式,屏蔽即可。 # 一、 配置 docker daemon 启动参数以新人远程仓库 # DOCKER_OPTS="--insecure-registry <HOST_IP>:5000" # 二、 编辑 /usr/lib/systemd/system/docker.service # ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd --insecure-registry <HOST_IP>:5000
# 重启docker systemctl daemon-reload systemctl restart docker
# 下载镜像 docker pull <HOST_IP>:5000/test
|
docker 数据管理相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 挂载数据卷 docker run -d -P --name web -v /path:/opt/webapp <镜像标签或者是ID> # 挂载只读数据卷 docker run -d -P --name web -v /path:/opt/webapp:ro <镜像标签或者是ID> # 创建一个数据卷容器 docker run -it -v /dbdata --name dbdata ubuntu # 在其他容器使用数据卷容器 docker run -it --volumns-from dbdata --name db1 ubuntu # 删除数据卷容器,需要在最后一个还挂载着数据卷的容器上使用,指定删除数据卷才行 docker rm -v <数据卷容器ID> # 数据卷容器备份 docker run --volumns-from dbdata -v $(PWD):/backup --name worker ubuntu tar -cvf /backup/backup.tar /dbdata # 数据卷容器恢复 docker run -v /dbdata --name dbdata2 ubuntu /bin/bash docker run --volumns-from dbdata2 -v $(PWD):/backup busybox tar -xvf /backup/backup.tar
|
docker 容器通信
1 2 3
| # 容器互联,避免占用多余的端口 docker run -d --name db training/postgres # 创建数据库容器 docker run -d -P --name web --link db:db training/webapp python app.py # 链接数据库容器 --link 容器名称:别名
|
docker Dockerfile
以下是一个Dockerfile的样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| # This Dockerfile uses the ubuntu image # VERSION 2 - EDITION 1 # Author: docker_user # 使用的基础镜像 FROM <image> # 环境变量 ENV HOST_IP 127.0.0.1 # 镜像元数据标签信息 LABEL version=1.0 # 维护者 MAINTAINER dockers_user <docker_user@email.com> # 容器运行的用户 USER root # 暴露端口 EXPOSE 80 443 # 工作目录 WORKDIR /home/ws # 增加文件 src 可以是URL 如果是tar文件直接被解压缩 ADD <src> <desc> COPY <src> <desc> # 推荐 # 运行命令 RUN <command> RUN echo "hello world" >> /tmp/a.txt RUN yum install g++ && echo "Hello" && echo "World" \ && echo "." # 入口命令 ENTRYPOINT command param1 ... # 镜像内使用的参数 ARG <name>[=<default value>] # 增加onbuild会使以此镜像为基础的镜像构建时运行这里边的命令 ONBUILD RUN echo "Hello" STOPSIGNAL signal # 禁止健康检查 HEALTHCHECK NONE SHELL ["/bin/sh","-c"] # 数据挂载点 VOLUME ["/data"] # 运行命令 CMD /usr/sbin/nginx # CMD ["nginx","-g","daemon off;"]
|
docker Dockerfile相关命令
1 2 3
| # 创建镜像 docker build -t <镜像标签> <Dockerfile所在路径> # 使用 .dockerignore 文件忽略文件
|
docker 最佳实践
- 精简镜像用途
- 选用合适的基础镜像
- 提供足够清晰的命令注释和维护者信息
- 正确的使用版本号
- 减少镜像层数
- 及时删除临时文件和缓存文件
- 提高生产速度
- 调整合理的指令顺序
- 减少外部源的干扰
docker create 命令与容器运行模式相关的选项 常见
1 2 3 4 5 6 7 8
| docker create -a # 绑定标准输入输出和错误 -d # 后台运行 -i # 指定标准输入打开 -p # 端口映射设置 -t # 分配一个伪终端 -it 一般联合使用 -v # 挂载驱动盘 宿主机:容器 -w # 默认工作目录
|