Docker安装部署
1. 简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2. 相关概念
Image 镜像
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Container 容器
容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。
Repository 仓库
Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
3. 安装过程
3.1. 在线安装
3.1.1. 安装所需的软件包
# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.1.2. 设置稳定的仓库
# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.1.3. 安装docker
列出并排序存储库中可用的版本
# yum list docker-ce --showduplicates | sort -r
本次安装17.09.0.ce-1.el7.centos版本
# sudo yum install docker-ce-17.09.0.ce-1.el7.centos docker-ce-cli-17.09.0.ce-1.el7.centos containerd.io
3.1.4. 启动 Docker
# sudo systemctl start docker
3.2.离线安装
3.2.1 Centos7
3.2.1.1 下载安装包
执行命令:
wget https://download.docker.com/linux/static/stable/x86_64/docker-17.09.0-ce.tgz
3.2.1.2 安装
1. 解压安装包并移动可执行文件目录,执行命令如下:
tar -xvf docker-17.09.0-ce.tar mv docker/* /usr/bin
2. 创建启动文件,执行命令如下:
vi /usr/lib/systemd/system/docker.service
输入文件内容如下:
[Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.io [Service] Environment="PATH=/root/local/bin:/bin:/sbin:/usr/bin:/usr/sbin" EnvironmentFile=-/run/flannel/docker ExecStart=/usr/bin/dockerd --log-level=error $DOCKER_NETWORK_OPTIONS -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure RestartSec=5 LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
3.2.1.3 启动
执行命令如下:
systemctl daemon-reload systemctl enable docker systemctl start docker
3.2.2 Ubuntu系统
3.2.2.1 下载安装包
执行命令:
wget https://download.docker.com/linux/ubuntu/dists/trusty/pool/stable/amd64/docker-ce_17.09.0~ce-0~ubuntu_amd64.deb
3.2.2.2 安装并启动
安装并启动,执行命令如下:
dpkg -i docker-ce_17.09.0-ce-0-ubuntu_amd64.deb
3.3 查看版本号
# docker -v
3.4 运行hello-world镜像验证docker
# sudo docker run hello-world
运行后会进行镜像下载,下载后执行结果如下图:
4.仓库地址配置(可选)
Docker安装完毕后,默认使用其官方的镜像仓库,但这个仓库对国内开发者不是很友好,速度很慢,所以正式使用docker前,我们需要变更这个默认的镜像仓库。
修改仓库配置命令如下:
vi /etc/docker/daemon.json
文件内容如下:
{ "registry-mirrors":["仓库地址"], "insecure-registries":["私有仓库地址:端口(192.168.10.164:5000)"] }
仓库地址:
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。
作者使用的是阿里云的镜像加速服务器:
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单搜索“容器镜像服务”。
左侧菜单找到“镜像加速器”,就可以看到自己的加速器地址了。
本地私有仓库搭建
1. 安装 registry
$ docker pull registry Using default tag: latest latest: Pulling from library/registry 709515475419: Pull complete df6e278d8f96: Pull complete 4b0b08c1b8f7: Pull complete 80119f43a01e: Pull complete acf34ba23c50: Pull complete Digest: sha256:412e3b6494f623a9f03f7f9f8b8118844deaecfea19e3a5f1ce54eed4f400296 Status: Downloaded newer image for registry:latest
2. 运行本地的 registry
docker run -d -p 5000:5000 --restart=always --name registry \ -v /your/path/to/registry-images:/var/lib/registry \ registry:latest
3. 将某个已有的 image 存入 registry
docker tag jdeathe/centos-ssh:centos-7 localhost:5000/ssh:7 docker push localhost:5000/ssh:7
4. pull 已经提交到 registry 的镜像
docker pull localhost:5000/ssh:7
局域网私有仓库
如上,搭建一个只有本机访问的私有镜像非常简单,不用对已有的 docker 服务进行任何配置。 如果要搭建一个能在局域网内访问的 docker 仓库,就需要对 docker 服务进行一些简单的配置。
首先,在主机 A 上:
安装 registry 镜像(同上)
docker tag jdeathe/centos-ssh:centos-7 192.168.10.164:5000/ssh:7 docker push 192.168.10.164:5000/ssh:7
修改主机 A 的 docker 配置(/etc/docker/daemon.json 文件不存在则直接创建)
{ "insecure-registries": ["192.168.10.164:5000"] }
重启 docker 服务
sudo systemctl restart docker
在同一局域网中的另一台主机 B 上
修改 docker 配置(/etc/docker/daemon.json 文件不存在则直接创建),使 docker daemon 能连上私有的 registry
{ "registry-mirrors": ["192.168.10.164:5000"], "insecure-registries": ["192.168.10.164:5000"] }
重启 docker 服务
sudo systemctl restart docker
下载主机 A 中仓库的镜像,在局域网中速度非常快,以后开发过程中做部署测试就非常方便了。
docker pull 192.168.10.164:5000/ssh:7
5 Docker运维常用命令
5.1 查看基本信息
docker info
5.2 镜像相关命令
查看本地镜像
docker images
docker镜像转tar包
docker save 镜像名称:版本号 -o 输出的文件名称.tar
tar包转docker镜像
docker load -i 指定导出的文件名称.tar
标记本地镜像(改名为目标主机的IP加路径)目的是为了上传镜像
docker tag原镜像名称:版本号 新镜像名称:版本号
上传镜像(会根据标记本地镜像上的ip和路径去匹配地址)
docker push 镜像名称:版本号
删除镜像
docker rmi 镜像名称:版本号
docker rmi 镜像ID
5.3 容器运行
运行容器 –d 后台运行 –e设置环境变量 –p 指定端口映射 –link添加连接到另个容器
docker run -d -e 环境变量key值=环境变量value值 -h 容器的主机名 --name=容器的名称 -p 主机的端口:容器的端口 --link 其他容器的名称 镜像名称
例:
docker run -d -e eureka_ip=registration -h configserver --name=configuration -p 30100:30100 --link registration ultra-iga-configuration
运行容器 –network=host 设置使用主机网络
docker run -d -h容器的主机名 --name=容器的名称 --network=host –p主机IP:主机的端口:容器的端口-e 环境变量key值=环境变量镜像名称
例:
docker run -d -h 192.168.10.164 --name=configuration --network=host -p 192.168.10.164:30100:30100 -e eureka_ip=192.168.10.164 -e eureka_port=30000 -e spring_cloud_config_server_defaultLabel=yujing -e spring_cloud_config_server_svn_uri=https://xxx.xxx.xxx.xxx/test/TEST1.0/config configuration
停止容器
docker stop 镜像ID
启动容器
docker start 镜像ID
删除容器
docker rm 镜像ID
查看窗口使用磁盘情况
docker system df -v
查看容器列表
docker ps -a
查看容器日志
dockre logs -f 镜像ID
5.4使用idea打镜像包
设置所要连接的服务器
set DOCKER_HOST=tcp://192.168.10.164:2375
使用maven命令打镜像包
mvn clean -DskipTests install docker:build