docker实践
一、导出和载入镜像
使用docker save命令可以导出镜像到本地文件:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 c4ff7513909d 5 weeks ago 225.4 MB
...
$sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
使用docker load 可以将导出的本地文件载入到本地镜像库:
[root@kwephicprc03547 ~]# docker load --input euler-aarch64.tgz 184a764bb580: Loading layer [==================================================>] 1.189 GB/1.189 GB Loaded image: euler:latest [root@kwephicprc03547 ~]# docker load --input centos-aarch64.tgz db7d26604fad: Loading layer [==================================================>] 244.7 MB/244.7 MB Loaded image: centos/aarch64:latest [root@kwephicprc03547 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
euler latest da5bac89d64d 40 hours ago 1.155 GB centos/aarch64 latest b1b73535f567 13 months ago 236.3 MB
二、在docker中使用systemd
Docker运行一个系统容器起来时,只是提供了特定的文件系统层和进程隔离,给人一种VM的感觉但却并不是VM,如果想要像在物理机那样使用systemctl start|status|stop来管理服务进程,然后你通常会看到:Failed to get D-Bus connection: Operation not permitted。
出现该错误的原因:1、需要启动systemd进程;2、需要特权。
因此需要一个可以使用systemd的容器时,可以用如下方式启动容器:
[root@kwephicprc03547 network-scripts]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE euler latest da5bac89d64d 41 hours ago 1.155 GB centos/aarch64 latest b1b73535f567 13 months ago 236.3 MB [root@kwephicprc03547 network-scripts]# docker run -tdi --privileged euler init WARNING: IPv4 forwarding is disabled. Networking will not work.
a64e7a90d851da3c10277e7941c36b22102c131cdbfa0258562c2e4b61794a57
参数解读:
1. -d:需要容器在后台以守护态形式运行,可添加-d实现;
2. -t:让docker分配一个伪终端并绑定到容器的标准输入上;
3. -i:让容器的标准输入保持打开。
4. --privileged:Docker将拥有访问主机所有设备的权限,同时Docker也会在apparmor或者selinux做一些设置,使容器可以容易的访问那些运行在容器外部的设备。
三、配置阿里云镜像加速器
1、安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start 注意:其他注意事项在下面的注释中 # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。 # vim /etc/yum.repos.d/docker-ce.repo # 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1 # # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages # Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos) # sudo yum -y install docker-ce-[VERSION] # 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。 # yum list docker-ce-selinux- --showduplicates | sort -r # sudo yum -y install docker-ce-selinux-[VERSION] # 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令 # 经典网络: # sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo # VPC网络: # sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
2、配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。
[root@kwephicprc03547 ~]# sudo tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors": ["https://nxwgbmaq.mirror.aliyuncs.com"] > } > EOF { "registry-mirrors": ["https://nxwgbmaq.mirror.aliyuncs.com"]}
[root@kwephicprc03547 ~]# sudo systemctl daemon-reload [root@kwephicprc03547 ~]# sudo systemctl restart docker
3、docker配置代理
可以发现做了如上配置之后,依然无法查看和下载镜像。docker的代理与系统的代理不一致,需要另外配置。
参考文档:https://docs.docker.com/config/daemon/systemd/
(1)创建配置文件:
mkdir /etc/systemd/system/docker.service.d touch /etc/systemd/system/docker.service.d/http-porxy.conf
(2)http-proxy.con做如下配置:
[Service] Environment="HTTP_PROXY=http://账号:密码@openproxy.aliyun.com:80/" Environment="HTTPS_PROXY=http://账号:密码@openproxy.aliyun.com:80/"
(3)重启服务和docker
[root@kwephicprc03547 ~]# sudo systemctl daemon-reload [root@kwephicprc03547 ~]# sudo systemctl restart docker