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