環境準備
10.0.0.100這臺宿主機先做好給docker容器本地yum源,其實也可以用阿里等其他的yum源
1 上傳6.9和7.6的映象到10.0.0.100這臺伺服器
[root@docker mnt]# ls
CentOS-6.10-x86_64-bin-DVD1.iso CentOS-7.6-x86_64-DVD-1810.iso
[root@docker mnt]# pwd
/mnt
2 安裝vsftpd軟體
[root@docker ~]# yum install -y vsftpd
3 啟動ftp
[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd
4 配置yum倉庫
[root@docker mnt]# mkdir -p /var/ftp/centos6.9
[root@docker mnt]# mkdir -p /var/ftp/centos7.5
[root@docker mnt]# vim /etc/fstab
/mnt/CentOS-7.6-x86_64-DVD-1810.iso /var/ftp/centos7.5/ iso9660 defaults 0 0
/mnt/CentOS-6.10-x86_64-bin-DVD1.iso /var/ftp/centos6.9/ iso9660 defaults 0 0
[root@docker mnt]# mount -a
[root@docker mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 12G 37G 24% /
/dev/loop0 4.3G 4.3G 0 100% /var/ftp/centos7.5
/dev/loop1 3.8G 3.8G 0 100% /var/ftp/centos6.9
windows驗證
基於容器的映象製作
基於容器的映象製作-Aliyun ECS(Centos6.9_sshd單服務)
#1 啟動基礎映象容器
[root@docker ~]# docker run -it --name="oldguo_centos" centos:6.9
#2 安裝所需要的軟體包 ,並且啟動測試
[root@8b59ea7b6a21 /]# mv /etc/yum.repos.d/*.repo /tmp
# 配置上面做好的yum源
[root@8b59ea7b6a21 /]# echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
[root@8b59ea7b6a21 /]# yum makecache fast && yum install openssh-server -y
[root@8b59ea7b6a21 /]# /etc/init.d/sshd start ----->重要:ssh第一次啟動時,需要生成祕鑰,生成pam驗證配置檔案
[root@8b59ea7b6a21 /]# /etc/init.d/sshd stop
[root@8b59ea7b6a21 /]# echo "123456" | passwd root --stdin
#3 映象的製作
[root@docker ~]# docker commit oldguo_centos oldguo/centos6.9_sshd:v1
[root@docker ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
oldguo/centos6.9_sshd v1 e9eeed6f18b6 3 seconds ago 332MB
mysql 5.7.28 db39680b63ac 10 days ago 437MB
nginx latest f7bb5701a33c 10 days ago 126MB
centos 7 5e35e350aded 8 weeks ago 203MB
centos 6.9 2199b8eb8390 9 months ago 195MB
centos 7.5.1804 cf49811e3cdb 9 months ago 200MB
[root@docker ~]#
#4 基於新映象啟動容器,實現centos6.9+sshd的功能
#啟動容器的時候,同時啟動sshd服務,這樣就能從宿主機通過ssh連上.
#/usr/sbin/sshd -D 前臺執行,死迴圈一樣,這樣容器就不會銷燬
[root@docker ~]# docker container run -d --name=sshd_2222 -p 2222:22 e9eeed6f18b6 /usr/sbin/sshd -D
#5 測試連線到容器
[root@docker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9010adf22d2 e9eeed6f18b6 "/usr/sbin/sshd -D" 24 seconds ago Up 22 seconds 0.0.0.0:2222->22/tcp sshd_2222
[root@docker ~]# docker container inspect c9010adf22d2
"IPAddress": "172.17.0.2",
[root@docker ~]# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
RSA key fingerprint is SHA256:PdEzm0s9pDOfdFx6Yyq3asyyp3oI8tY6kspT9xe56/k.
RSA key fingerprint is MD5:ec:82:2d:80:7c:5f:0e:0f:36:db:c0:2b:8d:70:8b:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.2' (RSA) to the list of known hosts.
[email protected]'s password:
[root@c9010adf22d2 ~]#
構建企業網站定製映象(Centos6.9_SSHD_LAMP_BBS)
1 啟動基礎映象容器
[root@docker ~]# docker container rm -f `docker ps -a -q`
[root@docker ~]# \rm -rf /opt/*
[root@docker ~]# mkdir -p /opt/vol/mysql /opt/vol/html
[root@docker ~]# docker run -it --name="oldguo_centos_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9
2 優化yum源並安裝軟體
[root@e240aa391816 /]# mv /etc/yum.repos.d/*.repo /tmp
[root@e240aa391816 /]# echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
[root@e240aa391816 /]# yum makecache fast && yum install openssh-server htppd mysql mysql-server php php-mysql -y
3 軟體初始化
sshd 初始化
[root@e240aa391816 /]# /etc/init.d/sshd start
[root@e240aa391816 /]# /etc/init.d/sshd stop
[root@e240aa391816 /]# echo "123456" | passwd root --stdin
mysqld 初始化
[root@c3fd597ec194 mysql]# /etc/init.d/mysqld start
[root@e240aa391816 /]# mysql
mysql> grant all on *.* to root@'%' identified by '123';
mysql> grant all on *.* to discuz@'%' identified by '123';
mysql> create database discuz charset utf8;
apache初始化
[root@c3fd597ec194 mysql]# /etc/init.d/httpd start
4 製作LAMP第一版基礎映象
[root@docker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c6015f3b4d7 centos:6.9 "/bin/bash" 2 minutes ago Exited (0) 20 seconds ago oldguo_centos_bbs
[root@docker ~]# docker commit 1c6015f3b4d7 oldguo/centos_lamp:v1
[root@docker ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
oldguo/centos_lamp v1 5c8abba7d2fb 9 seconds ago 416MB
oldguo/centos6.9_sshd v1 e9eeed6f18b6 12 minutes ago 332MB
mysql 5.7.28 db39680b63ac 10 days ago 437MB
nginx latest f7bb5701a33c 10 days ago 126MB
centos 7 5e35e350aded 8 weeks ago 203MB
centos 6.9 2199b8eb8390 9 months ago 195MB
centos 7.5.1804 cf49811e3cdb 9 months ago 200MB
5 根據第一版映象,啟動新容器
[root@docker ~]# docker run -it --name="oldguo_centos_bbs_v3" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html -p 8080:80 5c8abba7d2fb
[root@f22496ebafaf /]# /etc/init.d/mysqld start
[root@f22496ebafaf /]# /etc/init.d/httpd start
6 測試php功能
[root@docker ~]# vim /opt/vol/html/index.php
<?php
phpinfo();
?>
7 安裝bbs論壇
上傳bbs程式碼到宿主機 /opt/vol/html
[root@docker ~]# cd /opt/vol/html/
[root@docker html]# tar -xzvf bbs.tat.gz
[root@docker html]# chmod 777 -R /opt/vol/html/
[root@docker html]# pwd
/opt/vol/html
8 製作 LAMP+bbs第二版映象
[root@docker ~]# docker commit oldguo_centos_bbs_v3 oldguo/centos6.9_sshd_lamp_bbs:v1
9 建立啟動指令碼
[root@docker html]# cd /opt/vol/html
[root@docker html]# vim init.sh
#!/bin/bash
/etc/init.d/mysqld start
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker html]# chmod 777 init.sh
10 啟動容器,對映埠,掛載資料卷,自動起多服務
[root@docker html]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
oldguo/centos6.9_sshd_lamp_bbs v1 d73d6cf0d299 9 seconds ago 416MB
[root@docker html]# docker container run -d --name="oldguoyun_lamp_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html -p 22222:22 -p 8888:80 -p 33060:3306 d73d6cf0d299 /var/www/html/init.sh
centos:7.5.1804 sshd
和centos6.9 sshd 製作差不多,只是要注意初始化sshd的時候不一樣
啟動基礎映象容器
[root@docker ~]# docker container rm -f `docker ps -a -q`
[root@docker ~]# docker run -it --name="oldguo_centos" centos:7.5.1804
配置好yum源,安裝所需要的軟體包
[root@265f16e050ef /]# mv /etc/yum.repos.d/*.repo /tmp
[root@265f16e050ef /]# echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos7.5\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
[root@265f16e050ef /]# yum makecache fast && yum install openssh-server -y
重要:ssh生成pam驗證配置檔案。這裡centos6.9不一樣
[root@265f16e050ef /]# mkdir /var/run/sshd
[root@265f16e050ef /]# echo 'UseDNS no' >> /etc/ssh/sshd_config
[root@265f16e050ef /]# sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
[root@265f16e050ef /]# echo 'root:123456' | chpasswd
[root@265f16e050ef /]# /usr/bin/ssh-keygen -A
映象的製作
[root@docker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
265f16e050ef centos:7.5.1804 "/bin/bash" About a minute ago Exited (0) 21 seconds ago oldguo_centos
[root@docker ~]# docker commit 265f16e050ef oldguo_c75sshd
[root@docker ~]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
oldguo_c75sshd latest 2f8c67e5a553 9 seconds ago 244MB
基於新映象啟動容器,實現centos7.5+sshd的功能
[root@docker ~]# docker container run -d --name=sshd_2222 -p 222:22 oldguo_c75sshd /usr/sbin/sshd -D
測試連線到容器
[root@docker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b349c92b27e oldguo_c75sshd "/usr/sbin/sshd -D" 7 seconds ago Up 7 seconds 0.0.0.0:222->22/tcp sshd_2222
[root@docker ~]# docker container inspect sshd_2222
"IPAddress": "172.17.0.2",
[root@docker ~]# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
[email protected]'s password:
[root@9b349c92b27e ~]#
通過Dockerfile定製企業映象
1 Dockerfile的基本使用初體驗(centos6.9_sshd)
# 建立目錄編輯 dockerfile 檔案
[root@docker ~]# mkdir -p /opt/dockerfile/centos6.9_sshd
[root@docker opt]# cd /opt/dockerfile/centos6.9_sshd
[root@docker centos6.9_sshd]# vim Dockerfile
# Centos6.9-SSHDv1.0
FROM centos:6.9
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
RUN /etc/init.d/sshd start && /etc/init.d/sshd stop && echo "123456" | passwd root --stdin
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
# 使用dockerfile 構建映象
[root@docker centos6.9_sshd] docker image build -t "alnk/centos6.9_sshd:v1.0" ./
# 使用構建的映象啟動容器,並且測試
[root@docker centos6.9_sshd]# docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
alnk/centos6.9_sshd v1.0 c0e566655d56 14 seconds ago 332MB
[root@docker centos6.9_sshd]# docker container run -d --name="alnk_centos6.9_sshd" -p 2222:22 c0e566655d56
[root@docker centos6.9_sshd]# docker container inspect alnk_centos6.9_sshd
"IPAddress": "172.17.0.3",
[root@docker centos6.9_sshd]# ssh 172.17.0.3
[email protected]'s password:
[root@83e2d6e4be3e ~]#
2 Dockerfile 常用指令
FROM: 基礎映象
Syntax:
FROM centos:6.9
FROM centos@2199b8eb8390
RUN: 構建映象過程中執行的命令
Syntax:
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
RUN ["mysqld", "--initialize-insecure", "--user=mysql", "--basedir=/usr/local/mysql", "--datadir=/data/mysql/data"]
EXPOSE: 向外暴露的埠
Syntax:
EXPOSE 22
CMD 使用映象啟動容器時執行的命令
Syntax:
CMD ["/usr/sbin/sshd","-D"]
3 通過例子學習其他指令
dockerfile 構建Lamp基礎環境映象
1 建立存放dockerfile檔案的目錄
[root@docker dockerfile]# mkdir -p /opt/dockerfile/lamp
2 編輯dockerfile檔案
[root@docker dockerfile]# cd /opt/dockerfile/lamp/
[root@docker lamp]# vim dockerfile
# Centos6.9_sshd_LAMP
FROM centos:6.9
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server htppd mysql mysql-server php php-mysql -y
RUN /etc/init.d/sshd start && echo "123456" | passwd root --stdin && /etc/init.d/mysqld start && /etc/init.d/httpd start
# RUN mysql -e "grant all on *.* to root@'%' identified by '123';grant all on *.* to discuz@'%' identified by '123';create database discuz charset utf8;"
COPY init.sh /
ADD bbs.tar.gz /var/www/html/
# ADD https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/centos-bookmarks-7-1.el7.noarch.rpm /tmp
EXPOSE 22
EXPOSE 80
EXPOSE 3306
CMD ["/bin/bash","/init.sh"]
3 編輯初始化檔案
[root@docker lamp]# vim init.sh
#!/bin/bash
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';grant all on *.* to discuz@'%' identified by '123';create database discuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D
4 上傳程式碼
下載bbs包: https://alnk-blog-pictures.oss-cn-shenzhen.aliyuncs.com/blog-pictures/bbs.tar.gz)
[root@docker html]# cd /opt/dockerfile/lamp/
#直接上傳到這個目錄
#注意這裡的bbs.tar.gz 包不能用兩次,初始化完成以後,裡面的php程式碼會變化。所以要傳tar.gz的包
5 通過dockerfile檔案構建映象
[root@docker lamp]# docker image build -t "alnk/centos6.9_lamp:v1.0" ./
6 啟動容器
[root@docker lamp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alnk/centos6.9_lamp v1.0 b50c969af67d 29 seconds ago 465MB
[root@docker lamp]# docker container run -d --name="lamp" -p 80:80 -p 33060:3306 -p 2222:22 b50c969af67d
7 測試
ENTRYPOINT ["/bin/bash","/init.sh"]
說明:
ENTRYPOINT 可以方式,在啟動容器時,第一程序被手工輸入的命令替換掉,防止容器秒起秒關
# 刪除所有映象
[root@docker02 ~]# docker rmi -f `docker image ls -a -q`
# 刪除所有容器
[root@docker02 ~]# docker container rm -f `docker container ls -a -q`
其他參考連結
https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html