前言
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- dockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器 [2]
安装
注意
:本文是基于Centos7.5
讲解
操作系统要求
如需安装 Docker CE,您需要 64 位版本的 CentOS 7。
卸载旧版本
没有安装过旧版本,此步骤可以跳过
Docker 的早期版本称为 docker 或 docker-engine。如果安装了这些版本,请卸载它们及关联的依赖资源。
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine
本文是使用镜像仓库进行安装,当然还有其他方式,此处只讲通过镜像安装
安装依赖包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置 stable 镜像仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
更新 yum 软件包索引。
$ sudo yum makecache fast
如果这是自添加 Docker 镜像仓库以来您首次刷新软件包索引,系统将提示您接受 GPG 密钥,并且将显示此密钥的指纹。验证指纹是否正确,并且在正确的情况下接受此密钥。指纹应匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35。
安装最新版本的 Docker CE
$ sudo yum install docker-ce
安装指定版本的通过下面这个命令:
$ sudo yum install docker-ce-<VERSION>
启动
$ sudo systemctl start docker
验证
$ sudo docker run hello-world
配置阿里镜像
默认情况下,我们下载镜像都是从官方下载,由于是国外的网站,所有速度很慢。阿里云同步了一份国外的镜像仓库,速度比较快
创建文件:/etc/docker/daemon.json
输入以下内容:
{
"registry-mirrors": ["https://o8xmh69u.mirror.aliyuncs.com"]
}
这里的加速器地址是本人的,你自己的加速器,可以到https://dev.aliyun.com/search.html去查找。注册下帐号就有了。
使用
基本概念
镜像与容器的关系 :
镜像时死的,容器是运行的。一个镜像可以生成无数个容器,可以类比为一个类和无数个类实例。
镜像的版本:
镜像名字不加任何后缀表示最新版,例如docker run tomcat 等价于 docker run tomcat:latest
常用命令:
下面以tomcat镜像进行讲解:
docker search tomcat
: 在远程仓库查询tomcat相关的所有镜像docker pull tomcat
: 把镜像拉取到本地docker images
:查询当前本地的所有镜像docker run tomcat
: 运行tomcat镜像,不指定名字每次都会生成新容器docker run -it tomcat
:交互式运行,可以进行操作,例如可以ctrl + p + q
退出,但是容器还在运行docker attach 容器id或名称
:重新进入运行的容器docker run -d tomcat
: 以后台的方式运行 -d表示deamondocker run --name mytomcat tomcat
:运行tomcat容器,并且命名为mytomcatdocker run -d -p 8888:8080 --name mytomcat -v /home/app/:/usr/local tomcat
:-v
表示本地数据卷映射,可以理解为目录的影响,两个指针指向同一个位置,独立操作互相都可见。-p
表示端口映射docker stop 容器id或名称
:停止正在运行的容器docker stop $(docker ps -q)
: 停止所有正在运行的容器docker start 容器id或名称
:启动一个停止的容器docker restart 容器id或名称
: 重启一个运行中的容器docker ps
: 查询当前正在运行的容器docker ps -a
:查询所有容器,包括停止运行的docker rm 容器id或名称
: 删除容器docker rm -f 容器id或名称
: 强制删除,运行中的容器可以会被删除docker rm $(docker ps -aq)
: 删除所有容器docker rmi 镜像名称或id
: 删除镜像exit
: 退出并关闭容器ctrl + p + q
: 退出但不关闭容器docker inspect 镜像或容器id/名称
: 查看镜像或者容器的详细信息docker exec 容器id/名称 命令
: 在运行中的容器执行命令docker cp src 容器标识:des
: 复制本地文件或目录到容器中,src为本地路径,des为容器路径docker cp 容器标识:src des
:复制容器中的文件到本地docker commit -a "runoob.com" -m "my apache" a404c6c174a2 tomcat:v1
: 把修改后的容器a404c6c174a2
,打包成一个镜像tomcat:v1
-a
表示作者信息,-m
是提交时的注释docker build
:用Dockerfile来构建镜像。
Dockerfile
重要指令(指令必须大写):
FROM
: 基础镜像,当前镜像是基于哪个镜像的MAINTAINER
: 镜像维护者的名字和邮箱地址RUN
: 容器构建时,需要执行的命令EXPOSE
: 当前容器对外暴露的端口WORKDIR
: 指定在容器创建完成之后,终端默认打开的工作目录ENV
:构建镜像时,设置环境变量ADD
: 将宿主机目录的文件,拷贝进镜像,且ADD命令会自动处理url和解压tar压缩包COPY
: 类似于ADD,拷贝文件和目录到镜像中,但是不会执行解压等操作,仅仅是拷贝。VOLUME
: 容器数据卷,用于数据保存和持久化工作CMD
:指定一个容器启动时,要运行的命令,Dockerfile中可以有多个CMD指令,但是只有最后一个生效,另外CMD会被docker run之后的参数替换ENTRYPOINT
: 指定容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是它不会被覆盖ONBUILD
: 都此镜像被继承时,在构建子镜像时,该指令会被执行
示例:
/*使用当前目录下的Dockerfile来构建一个新的镜像,文件名称必须为Dockerfile*/
$ docker build -t centos:v1 .
/*通过 -f Dockerfile 文件的位置*/
$ docker build -f /path/to/a/Dockerfile .