1. 安装docker
参考:docker安装
2. 基础概念
2.1 容器命令
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
- docker ps:查看容器相关信息
- docker logs 容器ID:查看容器的输出
- docker stop 容器ID:停止容器
- docker pull 镜像名字:拉取镜像
- docker restart 容器ID:重启停止的容器
- docker exec -it 243c32535da7 /bin/bash:进入某个容器
- docker export 1e560fca3906 > ubuntu.tar:导出容器
- docker import ubuntu.tar test/ubuntu:将容器导入为镜像
- docker rm -f 容器ID:删除容器,** 容器必须是停止状态**
docker container prune:清理掉所有处于终止状态的容器 - docker run 加上–rm退出容器以后,这个容器就被删除了,方便在临时测试使用。不加–rm 退出容器后,容器只是停止运行,数据任然被保留。
- docker run -v: 挂载目录,通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
默认挂载的路径权限为读写。如果指定为只读可以用:ro
docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash
2.2 web应用
- docker run -P training/webapp python app.py:-P将容器内部的网络端口随机映射的主机上 ,-p(小写)是指定端口映射关系
0.0.0.0:32768->5000/tcp:主机的32768端口,容器中为5000
- docker run -d -p 5001:5000 training/webapp python app.py:主机地址在前,映射到容器中的地址
- docker port 容器ID:查看容器的端口映射关系
- docker logs -f 容器ID:像使用tail -f一样来输出容器内部的标准输出
- docker top 容器ID:查看容器内部运行的进程
- docker run --name 容器名:为新建的容器制定名字
2.3 镜像命令
-
docker images:列出本地主机上的镜像
-
docker rmi 镜像名:删除镜像
-
创建镜像
- 从已经创建的容器中更新镜像,并提交这个镜像
- 使用Dockerfile指令来创建一个新的镜像
-
更新镜像
- 1.用原有的镜像创建一个容器
- 2.在容器内操作
- 3.docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2
- 4.使用docker images进行查看
-
构建镜像
- docker build -t 目标镜像名字 . :使用当前目录下的Dockerfile创建一个镜像
- docker tag 镜像ID runoob/centos:dev:设置镜像标签
2.4 仓库管理
- docker hub地址
- docker login:登录,可以从docker hub上拉取自己账号下的全部镜像
- docker logout:退出
- docker search 关键词:搜索镜像
- docker pull 镜像名:拉取镜像
- docker push 镜像名:向docker hub上推送镜像
2.5 Dockerfile
- FROM:定制的镜像都是基于FROM的镜像
- RUN:用于执行后面跟着的命令行命令
- shell格式:RUN 命令(等同于shell命令)
- exec格式:RUN [“可执行文件”, “参数1”, “参数2”]
注意: dockerfile的每条指令都会在docker上新建一层,过多的无意义层,会造成镜像过大。
- docker build -t 目标镜像名 . :创建镜像
- 上下文路径:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
- COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
- ADD ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- CMD
- CMD 在docker run时运行
- RUN 在docker build
- ENV:设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:
-
EXPOSE:声明端口
-
WORKDIR:制定工作目录,只有通过 WORKDIR 创建的目录才会一直存在。
3. 其他场景
3.1 修改以后镜像中的文件
有两种方式:
- 修改原文件后,用dockerfile重新构建
- 在已有镜像的基础上,新建一个容器,修改文件,docker commit
- 或者把源程序,采用挂载的方式(docker run -v)这样修改源文件了,可以马上生效
4. 导出,导入镜像
4.1 导出镜像
docker save -o image.tar image_name
4.2 导入镜像
docker load -i image.tar