環境準備

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驗證

ftp://10.0.0.100/centos6.9/

ftp://10.0.0.100/centos7.5

基於容器的映象製作

基於容器的映象製作-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包

上傳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