版本:19.03.5
Docker是基于Go语言实现的容器引擎。
解决运行环境和开发环境不同造成的问题。
Docker分为DockerCE社区版和DockerEE企业版。
Docker 由镜像、容器、远程镜像仓库。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
镜像仓库(Repository)
镜像仓库顾名思义是用来存放镜像的。
官方仓库地址: https://hub.docker.com
也可以配置其他仓库地址例如阿里运或个人仓库私服,使用配置文件 /etc/docker/daemon.json(没有时新建该文件)。
{
"registry-mirrors": ["<your accelerate address>"]
}
使配置生效:
# systemctl daemon-reload # systemctl restart docker
镜像(Images)
是一种联合文件系统(Union File System),相当于一个linux文件系统。特点:镜像是分层的。
不同镜像可以共享相同的层。
镜像本身是只读的。
镜像常用操作指令:
镜像信息# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 11 months ago 1.84kB查询镜像
# docker search 镜像名称将镜像下载到本地镜像仓库
# docker pull 镜像名称:标签刪除镜像
# docker rmi {镜像ID|镜像名称:标签}
将镜像保存为物理文件
# docker save -o 保存镜像的文件名称.tar {镜像ID|镜像名称:标签}
加载保存为物理文件的镜像
# docker load -i 保存镜像的文件名称.tar
将本地镜像推送到远程仓库
-- 可能需要认证 login/logout ,需要输入用户名和密码 # docker login docker.test.com -- 提交前需要更改镜像名称,需要增加用户前缀避免冲突 # docker tag 镜像名称:镜像标签 用户前缀/新镜像名称:新镜像标签 -- 推送 # docker push 用户前缀/新镜像名称:新镜像标签
容器(Container)
容器是通过运行镜像产生的。是简易版的Linux环境 包括文件系统、用户空间、进程空间。
容器是完全使用沙箱机制,相互之间不会有任何接口。
容器常用指令:
列出所有运行中的容器
# docker ps
可增加参数 -a 查询所有容器
新建启动容器# docker run {镜像ID|镜像名称:标签}退出容器
#exit (退出并停止容器)
Ctrl + p + q (退出不停止容器)
启动容器:
# docker start {容器ID|容器名称}停止容器:
# docker stop {容器ID|容器名称} # 强制停止容器: # docker kill 容器ID重启容器:
# docker restart {容器ID|容器名称}删除容器:
# docker rm {容器ID|容器名称} # 删除多个容器: # docker rm -f $(docker ps -aq) # docker ps -a -q | xargs docker rm后台方式运行容器
# docker run -d {镜像ID|镜像名称:标签} # 端口映射 # docker run -d -p 宿主机端口:容器内端口 –-name 自定义容器名称 {镜像ID|镜像名称:标签}查看日志
# docker logs -f -t –tail {容器ID|容器名称}查看容器内的进程
# docker top {容器ID|容器名称}
# docker stats {容器ID|容器名称}查看容器详细信息
# docker inspect {容器ID|容器名称}进入正在运行的容器,并以前台方式运行(i交互式)
# docker exec -it 容器ID bashshell 产生的新进程 # docker attach 容器ID 进入容器,不产生新的进程从容器内拷贝文档到主机
# docker cp 容器Id:容器内路径 宿主主机路径
# docker commit -m=”说明” -a=”作者” 容器ID “镜像名称:标签”
数据卷(data volumes)
数据卷是一种特殊的目录或文件,可以实现宿主主机和容器数据共享,这个目录或文件是存在于宿主主机上的。
当容器停止运行并删除后,容器所产生的数据将会丢失,数据卷可以用来保存持久化容器在运行过程中产生的数据,也可以用来当做恢复容器运行所需数据的源。
数据前是独立于容器生命周期,并且可以在被多个容器共享的。
当一个数据圈被多个容器挂载时,则该容器被称为数据容器卷。
增加数据卷
# docker run -it -v 容器内路径 镜像名称数据容器卷
# docker run -it –name 容器名称2 –volumes-from 容器名称1 镜像名称 # 容器名称1 成为数据卷容器
Dockerfile
Dockerfile文件是用来构建镜像的文本文件。关键字(所有关键字都需要大写):
FROM 指定基础镜像,定制的镜像都是基于 FROM 的镜像
MAINTAINER 作者
RUN 用于(docker build)执行后面跟着的命令行命令。
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。
CMD 指定容器启动过程中(docker run)需要运行的命令
CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
ENTRYPOINT 和CMD类似,单参数有不会被docker run的参数覆盖。
但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
COPY 复制指令,将宿主机中文件或者目录复制到容器里指定路径ADD 将宿主机的文件复制到容器指定路径,并且解压。
ENV 设置环境变量
ARG 构建参数
VOLUME 定义匿名数据卷。
EXPOSE 声明端口
WORKDIR 指定工作目录
USER 用于指定执行后续命令的用户和用户组
HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD 用于延迟构建命令的执行。
推荐文章:https://www.runoob.com/docker/docker-dockerfile.html
执行构建
# docker build -f 路径 -t 镜像名称 执行目录
docker-compose
docker-compose 是有 python实现的,用来对多个容器的定义和运行进行管理。
官网文档:https://docs.docker.com/compose/
docker-swarm
swarm是Docker官方提供的docker集群管理工具。
官方文档:https://docs.docker.com/swarm/overview/