1. Docker 简介
Docker是一个开源的容器引擎,它有助于更快的交付应用。Docker可将应用程序和基础设施层隔离,并能将基础设施当做程序一样进行管理。是赢Docker可以更快的打包,测试以及部署应用程序,可以缩短从编写到部署运行代码的周期。
2. Docker 架构
概念 | 说明 |
---|---|
Client(Docker客户端) | Docker客户端是 Docker的用户界面特可以接受用户命令和配置标识,并与Docker daemon 通信。图中,docker build 等都是Docker的相关命令。 |
Docker daemon(Docker守护进程) | Dockerdaemon是一个运行在宿主机(DOCKER_HOST)的后台进程,可通过 Docker 客户端与之通信 |
Images (Docker镜像) | Docker镜像是一个只读模板。是用于创建 Docker 容器的模板 |
Container(容器) | 容器是是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过Docker API 或者CLI 命令来启动,移动,删除容器 |
Registry (仓库) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
2.2 CentOS7 安装Docker
1.确保 yum 包更新到最新
[root@localhost ~]# yum -y update
2.安装yum-utils 这样就能使用yum-config-manager工具设置yum源
[root@localhost ~]# yum install -y yum-utils
3.添加docker的yum源
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4.列出docker所有版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
5.安装
[root@localhost ~]# yum install docker-ce
# yum install <FQPN>
6.启动
[root@localhost ~]# systemctl start docker
7.开机自启
[root@localhost ~]# systemctl enable docker
8.查看docker安装版本
docker version
3. Docker镜像常用命令
*1. 搜索镜像
[root@master ~]# docker search 镜像名称 #例:docker search nginx
*2. 下载镜像
[root@master ~]# docker pull 镜像名称 #例:docker pull java
该命令可指定想要下载的镜像标签以及Docker Registry 地址。例如:docker pull reg itmuch.com/java:7 这样就可以从指定的Docker Registry 中下载标签为7 的java镜像
*3. 列出镜像
[root@master ~]# docker images
*4. 删除镜像
[root@master ~]# docker rmi 镜像名称
[root@master ~]# docker rmi -f $(docker images) #-f 标识强制删除
4. Docker 容器常用命令
*1. 新建并启动容器
[root@master ~]# docker run
使用docker run命令即可新建启动一个容器,它有很多选项:
-d : 标识后台运行
-P : 随机端口映射
-p : 指定端口映射,有以下四种
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
-network : 指定网络模式,该选项有以下可选参数:
- --network=bridge : 默认选项,标识连接到默认网桥
- --network=host : 容器使用宿主机网络
- --network=container:NAME_or_ID : 告诉Docker让新建的容器使用已有容器的网络配置
- --network=none : 不配置该容器网络,用户可以自定义网络配置
示例:
[root@master ~]# docker run -d -p 91:80 nginx
*2. 列出容器
[root@master ~]# docker ps
*3. 停止容器
[root@master ~]# docker stop 容器ID
[root@master ~]# docker kill 容器ID #强制停止
*4. 启动停止的容器
[root@master ~]# docker start 容器ID
*5. 重启容器
[root@master ~]# docker restart 容器ID
*6. 进入容器
[root@master ~]# docker attach 容器ID
*7. 删除容器
[root@master ~]# docker rm 容器ID # 只能删除已经停止的容器,删除正在运行的容器 添加 -f 参数
5. Dockerfile指令详解
FROM 指定基础镜像,想在其他指令之前 。FROM 指令后的所有指令都依赖该指令指定的镜像
RUN 编译镜像时运行的脚本。
格式: RUN <command>
RUN ["execuable","param1","param2"]
示例: RUN source $HOME/.bashrc;\
echo $HOME
RUN [“/bin/bash”,”-c”,”echo hello”]
RUN [“sh”,”-c”,”echo”,”$HOME”]
ADD 复制文件。
格式: ADD <src> ... <dest>
ADD ["<src>",..."<dest>"]
src 可以是一个Dockerfile 相对路径,也可以是一个url。
注意:
(1). src 必须在构建的上下文内,不能使用例如:ADD ../somethine /something 这样的命令,因为
docker build 命令首先会将上下文路径和器子目录发送到docker daemon 。
(2). 如果src是一个url,同时dest不以斜杠结尾,dest 将被视为文件,四川人对应的内容将被下载到dest。
(3). 如果 src 是一个 url,同时dest以斜杠结尾,dest将被视为目录,src 对应的内容下载到 dest 目录
ARG 设置编译镜像时加入的参数。
格式: ARG <name>[=<default value>]
示例: ARG user1=someuser
CMD 容器启动命令。每个Dockerfile 只有一个CMD命令,如果指定了多个CMD,最后一条被执行,如果启动容器时指
定了运行的命令,则会覆盖掉CMD指定的命令
格式: CMD ["execuable","param1","param2"] (腿甲使用)
CMD ["param1","param2"] (为ENTRYPOINT指令提供预设参数)
CMD command param1,param2 (在shell中执行)
COPY 编译镜像时复制文件到镜像中。
格式: COPY <src> ... <dest>
COPY ["<src>",..."<dest>"]
ENTRYPOINT 这只容器入口程序。和CMD命令一样,都是指定Docker容器启动时执行的命令,可多次设置,最后一条有效
格式: ENTRYPOINT ["execuable","param1","param2"]
ENTRYPOINT command param1,param2
ENV 设置容器环境变量。
格式: ENV <key> <value>
ENV <key>=<value>
示例: ENV JAVA_HOME /path/to/java
EXPOSE 这只镜像暴露的端口。
格式: EXPOSE port1
EXPOSE port1 port2 port3
LABEL 设置镜像标签。
格式: LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例: LABEL "com.example.vendor"="ACME Incorproated"
LABEL version="1.0"
MAINTAINER 设置镜像作者。
格式: MAINTAINER <name>
USER 设置运行 RUN CMD ENTRYPOINT 的用户名。
格式: USER <name>
VOLUME 设置容器的挂载点。改指令使容器中的一个目录具有持久化存储的功能,该目录可以被容器本身使用,也可以共享给其他容器。
格式: VOLUME ["/data"]
WORKDIR 设置 RUN CMD ENTRYPOINT COPY ADD 指令的工作目录。
格式: WORKDIR /path/to/workdir
STOPSIGNAL 设置容器退出时,Docker Daemon向容器发送的信号量
格式: STOPSIGNAL signal
提示: 信号量可以是数字或者信号量的名字,如9或者SIGKILL