《Docker技术入门与实战》 的读书笔记, 之所以想仔细看看Docker是因为感觉这玩意在配置环境方面是真的好用,有些时候只是想跑跑某些代码,试试效果,配环境浪费了太多时间,并且用完之后说不定还导致之前环境变化出问题.用了Docker避免了一堆问题,并且Docker还可以偶尔配置个私有云什么的玩玩
1. 基本概念与安装过程
详见Docker配置脚本中的文档
2. Docker镜像的操作
基础操作:
- 获取镜像:
docker pull [server]name:tag
- 列出当前主机上的镜像:
docker images / docker image ls
- 给镜像打tag:
docker tag ubuntu:latest myubuntu:latest
- 查看镜像历史:
docker history ubuntu:latest
- 搜索镜像:
docker search
- 删除镜像:
docker rmi / docker image rm
使用id删除会尝试先删除所有tag,再删除镜像本身,当有container存在的时候镜像无法被删除 - 查看当前运行的container:
docker ps -a
- 清理镜像:
docker image prune
创建新镜像:
- 基于现有容器创建:
docker [container] commit CONTAINER name:tag
- 基于Dockerfile创建
导出和载入镜像:
- 存出:
docker [image] save
eg:docker save -o ubuntu18.04.tar ubuntu:18.04
- 载入:
docker load -i ubuntu18.04.tar
或者docker load < ubuntu18.04.tar
上传镜像:
docker push name:tag
或者推送到私有registry需要先打tag
docker tag test:latest 192.168.1.3:5000/test:latest
docker push 192.168.1.3:5000/test:latest
3. Docker容器的操作
创建并运行容器
内部运行逻辑:
- 检查镜像是否存在,不存在则从远程下载
- 利用镜像创建容器并启动
- 分配文件系统给容器,并在只读镜像层外侧挂载一层可读可写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
- 从网桥的地址池配置一个IP地址给容器
- 执行用户指定的应用程序
- 执行完毕容器终止运行
eg:docker run -it ubunu:18.04 /bin/bash
docker run --name
命令可以指定docker容器名字
守护态运行:
让容器在后台运行可以使用-d
参数启动后会返回一个id
,也可以使用docker ps -a
查看后台运行的容器
停止容器运行:
docker stop
进入后台运行的容器
docker attach
进入后台容器,所有窗口会同步
docker exec
最推荐的方式
删除容器
docker container rm
导入和导出容器
docker export -o CONTAINER
导出
docker import file name:tag
导入
文件复制
docker cp CONTAINER:SRC_PATH DST_PATH
4. Docker数据管理与端口映射
数据卷(Data Volumes)为可供容器使用的特殊目录,将主机的目录直接映射到容器中,类似Linux下的mount命令.
docker run -it -v /home/dell/test:/data:rw
最后的权限可以是ro
rw
等.
端口映射:Docker启动的时候可以通过指定参数将外部端口映射到Docker容器的端口
- -p:
docker run -p 12580:80 ...
- -P:随机把主机
49000~49900
端口映射到容器中
5. 利用Dockerfile创建镜像
基本结构
以#开头的为注释,文件内容基本可以分成四块:基础镜像信息
维护者信息
镜像操作指令
容器启动时执行的指令
各种指令
配置指令
:
-
ARG
: 定义创建镜像时使用的变量 -
FROM
: 指定所创建镜像的基础镜像 -
LABEL
:为生成的镜像添加标签信息 -
EXPOSE
:设置镜像内服务监听的端口 -
ENV
: 指定环境变量 -
ENTRYPOINT
:指定镜像的默认入口命令 -
VOLUME
: 创建一个数据卷挂载点 -
USER
: 指定运行容器的用户名 -
WORKDIR
: 配置工作目录 -
ONBUILD
:创建子镜像时自动执行的命令 -
STOPSIGNAL
: 指定退出的信号值 -
HEATHCHECK
: 配置启动容器如何进行健康检查 -
SHELL
:指定默认shell
操作指令
:
-
RUN
: 执行命令 -
CMD
: 启动容器时指定默认执行的命令 -
ADD
: 添加内容到镜像 -
COPY
: 复制内容到镜像
创建镜像
docker build [OPTIONS] PATH
使用.dockerignore
文件
防止创建镜像的时候把无关数据发送的Docker服务端
使用技巧
- 对于需要编译的语言,编译环境和运行环境最好分开制作两个镜像,一个用于编译,另一个用于运行
- 修改软件源:
vi /etc/apt/sources.list.d/163.list