Docker Hub 国内加速

因为Docker Hub没有在国内部署站点或者增加了国内的CDN,这导致国内的开发者在使用docker pull 获取images的时候速度非常的慢,甚至于因为网络的原因会失败。

但是Docker Hub有着非常丰富的镜像资源,所以我这一直是个问题困扰着我,一次偶然机会发现了DaoCloud提供了国内镜像加速服务,并且提供的Docker Hub Mirror详细的文档。

1. 注册DaoCloud账号

首先,你需要到一DaoCloud账号,注册很方便,点击地址:signup

2. 登录到你的DaoCloud账号内,然后入下图操作

3. 查看你的DaoCloud加速器地址

链接

选择你相对应平台的的加速器设置

HowTo Use Docker create a Tomcat Project

1. 安装CentOS 7.x

略。

2. 安装docker

详见: How to Install Docker on CentOS 6.x

3. 基础docker命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 获取centos6 docker镜像
[root@docker ~]# docker pull centos6
Using default tag: latest
latest: Pulling from library/centos:centos6

43db9dbdcb30: Downloading 41.14 MB/49.33 MB
43db9dbdcb30: Pull complete
2dc64e8f8d4f: Pull complete
670a583e1b50: Pull complete
183b0bfcd10e: Pull complete
Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b
Status: Downloaded newer image for centso:centos6

# 查看当前服务器上的docker镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6-visionet latest aeed37612ecb 6 hours ago 1.916 GB
centos centos6 a3c09d36ab4a 2 days ago 194.6 MB
registry latest c6c14b3960bd 3 days ago 33.28 MB
# 查找docker镜像
[root@docker ~]# docker search centos:centos6
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 10 [OK]
lemonbar/centos6-ssh Installed openssh-server on centos6, defau... 7 [OK]
sergeyzh/centos6-nginx 2 [OK]
guyton/centos6 From official centos6 container with full ... 2 [OK]
paijp/centos6-apache-php-sqlite2 php5.3.3 with sqlite2 and apache on CentOS... 1 [OK]
edrans/centos6 1 [OK]
mohri1219/centos6.7-ruby2.2.2-mysql5.6 centos6.7-ruby2.2.2-mysql5.6 1 [OK]
...
...

# 删除 centos6 docker镜像
[root@docker ~]# docker rmi IMAGES_NAME
[root@docker ~]# docker rmi centos:centos6
# 报错无法删除
Error response from daemon: conflict: unable to remove repository reference "centos" (must force) - container 705a30cbc002 is using its referenced image 42118e3df429
# 这是因为之间的运行的进程没有清楚导致该images正在使用中,使用一下命令查看占有的进程
[root@docker ~]# docker ps -a # 查看所有的docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
705a30cbc002 centos:centos6 "/bin/bash" 6 minutes ago Exited (0) 6 minutes ago centos6
[root@docker ~]# docker rm 705a30cbc002
705a30cbc002
[root@docker ~]# docker rmi centos:centos6
Untagged: centos:centos6
Deleted: sha256:42118e3df429f09ca581a9deb3df274601930e428e452f7e4e9f1833c56a100a
Deleted: sha256:d72d0199021776e77ac14a764a3decd156e9f6f18b37e25b867b0f1ca42fb3d9
Deleted: sha256:fb178c6cea1453d089ce033b96eba0efdb42274138e042517ea2d5ea7bb51665
Deleted: sha256:8945af30572845a904adce2aeaf73402c842d86e99e8f10688b25cb27834110b
Deleted: sha256:ea9f151abb7e06353e73172dad421235611d4f6d0560ec95db26e0dc240642c1

4. 运行一个docker镜像

进入交互式程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@docker ~]# docker run  -it centos:centos6 /bin/bash
[root@c1d190f95562 /]# cat /etc/redhat-release
CentOS release 6.8 (Final)
# Install openssh-server and httpd
root@d8c122dbe09d:/# yum install -y openssh-sever httpd
root@d8c122dbe09d:/# exit

# 注意当你执行exit,从容器之中退出时,容器也会随着关闭,这时如果还继续执行上条命令
# 你会发现之前所有的操作都被还原,因为相对于docker,又是新开了一个进程
# 在exit退出之后,使用一下命令查看上次提交,然后commit修改,便可保存之前的修改

[root@docker ~]# docker ps -l
[root@docker ~]# docker commit c1d190f95562 centos:centos6-httpd
sha256:77eb12e36c7bbe9ef874555b1873019022b5258740aa731627e2cd6fa749c325
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6-httpd 77eb12e36c7b 3 seconds ago 290.3 MB
centos6-visionet latest aeed37612ecb 6 hours ago 1.916 GB
centos centos6 a3c09d36ab4a 2 days ago 194.6 MB
registry latest c6c14b3960bd 3 days ago 33.28 MB

5. 编辑Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# dockfile的第一行一定是FROM,指定了父镜像
FROM centos:centos6

# RUN 指的是运行的命令
RUN yum install -y epel-release
RUN yum install -y bash-completion
RUN yum install -y openssh-server openssh-client sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 增加一个用户,并赋予sudo权限
RUN useradd visionet
RUN echo "visionet:visionet" | chpasswd
RUN echo "visionet ALL=(ALL) ALL" >> /etc/sudoers

# 注意,如果没有执行一下两个命令,sshd是无法远程登陆的
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

# EXPOSE 22, 将22端口暴露出来,方便ssh远程连接
RUN mkdir /var/run/sshd
EXPOSE 22
# CMD 为系统内部执行命令
CMD ["/usr/sbin/sshd", "-D"]

6. 生成自定义docker镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# build 编译镜像
[root@docker ~]# docker build -f dockerfile3 -t centos:centos6-ssh .
Sending build context to Docker daemon 44.54 kB
Step 1 : FROM centos:centos6
---> a3c09d36ab4a
Step 2 : RUN yum install -y epel-release
---> Using cache
---> 04d81f280a63
Step 3 : RUN yum install -y bash-completion
---> Using cache
---> 5ca26894dc9d
Step 4 : RUN yum install -y openssh-server openssh-client sudo
---> Using cache
---> 42278450311e
Step 5 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
---> Using cache
---> db35bef562a2
Step 6 : RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Using cache
---> dc9f2b82e198
Step 7 : RUN useradd visionet
---> Using cache
---> 06c574a51755
Step 8 : RUN echo "visionet:visionet" | chpasswd
---> Using cache
---> 03412f053d04
Step 9 : RUN echo "visionet ALL=(ALL) ALL" >> /etc/sudoers
---> Using cache
---> bf8476812a62
Step 10 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
---> Using cache
---> 2314cce75171
Step 11 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
---> Using cache
---> 99304cd9ac15
Step 12 : RUN mkdir /var/run/sshd
---> Using cache
---> f87283751553
Step 13 : EXPOSE 22
---> Using cache
---> 56c41202dcb9
Step 14 : CMD /usr/sbin/sshd -D
---> Using cache
---> d6dccb483fa6
Successfully built d6dccb483fa6
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6-ssh d6dccb483fa6 2 minutes ago 363 MB
centos centos6-httpd 77eb12e36c7b 6 minutes ago 290.3 MB
centos6-visionet latest aeed37612ecb 6 hours ago 1.916 GB
centos centos6 a3c09d36ab4a 2 days ago 194.6 MB
registry latest c6c14b3960bd 3 days ago 33.28 MB

# 后台运行docker容器,并指定nat端口转发
[root@docker ~]# docker run -d -p 2222:22 -P --name=sshd centos:centos6-ssh
b4211f7a304d9e34b72b510230be2c7a76b276886b488f08f3e12896a4d3c172

7. ssh登陆到docker容器内,部署项目环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# inspect 查看docker 容器IP地址
[root@docker ~]# docker inspect sshd | grep IPAddress
[root@docker ~]# ssh visionet@172.17.0.2
visionet@172.17.0.2's password:
[visionet@b4211f7a304d ~]$

# Install mysql
# Install tomcat server

[visionet@b4211f7a304d ~]$ exit
[root@docker ~]# docker stop sshd
sshd
[root@docker ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4211f7a304d centos:centos6-ssh "/usr/sbin/sshd -D" 6 minutes ago Exited (255) 3 seconds ago sshd
[root@docker ~]# docker commit b4211f7a304d centos:centos6-tomcat
sha256:b4f114d5484822d9a3ddf1100b76b460985ba5e5d31e936570e8d7dbd8df282c
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6-tomcat b4f114d54848 4 seconds ago 363.1 MB
centos centos6-httpd 77eb12e36c7b 15 minutes ago 290.3 MB
centos6-visionet latest aeed37612ecb 7 hours ago 1.916 GB
centos centos6-ssh d6dccb483fa6 9 hours ago 363 MB
centos centos6 a3c09d36ab4a 2 days ago 194.6 MB
registry latest c6c14b3960bd 3 days ago 33.28 MB

8. 推送centos:centos6-tomcat到私有docker仓库

HowTo Install Docker on CentOS 6.x

1. Add the EPEL Repository

1
rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2. Update your system

1
yum update -y

3. Install

1
yum install -y docker-io

4. Configure

1
2
3
4
service docker start
chkconfig docker on

docker info

5. Download a Docker Container

1
docker pull centos

6. Run a Docker Container

1
docker run -i -t centos /bin/bash

7. Find Docker Container

1
docker search ubuntu

FAQ

1. Faild to start docker on CentOS 6.x

/usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference

1
2
3
4
5
6
the lib-device-mapper that you have isn't exporting a symbol ("Base") that Docker needs.
this by upgrading lib-device-mapper to version 1.02.90.

# You may have to enable the public_ol6_latest repo in order to get this package.
sudo yum-config-manager --enable public_ol6_latest
sudo yum install device-mapper-event-libs

2. Faild to use docker

Get http:///var/run/docker.sock/v1.19/info: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

1
2
3
# this is because docker no restart ok.

pkill -9 docker && service docker start

3. HowTo save ‘docker run -i -t xxx /bin/bash’

1
2
3
docker ps -l
docker commit ID newname
docker images
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×