基于容器的镜像制作

制作本地局域网yum源

安装vsftpd软件

yum install -y vsftpd

启动ftp

systemctl enable vsftpd
systemctl start vsftpd

上传系统进行到虚拟机

#镜像可以去各大镜像站下载,上传后镜像后挂在到指定目录
mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso  /var/ftp/centos6.9/
mount -o loop /mnt/CentOS-7-x86_64-DVD-1804.iso  /var/ftp/centos7.5/

配置yum仓库

mkdir -p /var/ftp/centos6.9
mkdir -p /var/ftp/centos7.5

cat >/etc/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos6.9
enabled=1
gpgcheck=0
EOF


cat >/etc/yum.repos.d/ftp_7.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos7.5
enabled=1
gpgcheck=0
EOF

通过浏览器查看

ftp://10.0.0.100

基于容器的镜像制作-Aliyun ECS(Centos6.9_sshd 单服务)

启动基础镜像容器

docker pull centos:6.9
docker container run -it --name="1997sty_centos" 2199b8eb8390

容器中操作安装ssh

#移走原有文件
mv /etc/yum.repos.d/* /tmp/

#创建新的yum源
cat >/etc/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos6.9
enabled=1
gpgcheck=0
EOF

#用命令让配置生效
yum clean all
yum makecache

#安装对应软件
yum install -y openssh-server

#启动一次sshd服务(第一次启动会生成密钥对)
/etc/init.d/sshd start

#给容器中的root用户设置密码
passwd

宿主机ssh登录验证

#登录容器(需要设置密码)
ssh 172.17.0.10

#登录后可以看到ssh相关进程
docker container top 1997sty_centos

基于当前容器生成镜像

#生成新的镜像
docker commit 1997sty_centos 1997sty/centos6.9_sshd:v1

#查看镜像
[root@home ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
1997sty/centos6.9_sshd   v1                  73a4c56c7546        45 seconds ago      340 MB
centos                   6.9                 2199b8eb8390        14 months ago       195 MB

启动容器

  • --name=sshd_2222 : 容器命名为sshd_2222
  • -p 2222:22 : 将容器22端口映射到宿主机2222端口
  • /usr/sbin/sshd -D : 启动sshd服务在前台运行,如果使用/etc/init.d/sshd start,执行完命令后容器会直接关闭
docker container run -d --name=sshd_2222 -p 2222:22 73a4c56c7546 /usr/sbin/sshd -D

构建企业网站定制镜像(Centos6.9_SSHD_LAMP_BBS)

创建数据卷目录

mkdir -p /opt/vol/mysql /opt/vol/html

启动基础镜像容器

docker run -it --name="1997sty_centos_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9

容器中操作安装ssh lamp环境

#移走原有文件
mv /etc/yum.repos.d/* /tmp/

#创建新的yum源
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

#sshd初始化
/etc/init.d/sshd start
/etc/init.d/sshd stop
echo "123456" | passwd root --stdin

#mysqld初始化
/etc/init.d/mysqld start

#登录mysql执行以下命令
grant all on *.* to root@'%' identified by '123';
grant all on *.* to discuz@'%' identified by '123';
create database discuz charset utf8;

#apache初始化
/etc/init.d/httpd start

基于当前容器生成第一版基础镜像

#生成新的镜像
docker commit 1997sty_centos_bbs 1997sty/centos_lamp:v1

#查看镜像
[root@home ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
1997sty/centos_lamp      v1                  f30af1e8537c        8 seconds ago       415 MB

根据第一版镜像启动新容器

docker run -it --name="1997sty_centos_bbs_v2" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html -p 90:80 f30af1e8537c

容器中操作启动httpd和mysqld

/etc/init.d/mysqld start
/etc/init.d/httpd start

容器中操作测试php功能

#修改文件后访问宿主机的90端口进行验证
cat >/var/www/html/index.php <<EOF
<?php
phpinfo();
?>
EOF

安装bbs论坛

  • 上传bbs代码到宿主机/opt/vol/html并解压,需要保证该目录有可读可写权限
  • Discuz_X3.3_SC_GBK.zip

制作LAMP+bbs第二版镜像

docker commit 1997sty_centos_bbs_v2 1997sty/centos6.9_sshd_lamp_bbs:v1

创建启动脚本并修改脚本权限

cat > /opt/vol/html/init.sh <<EOF
#!/bin/bash
/etc/init.d/mysqld start
/etc/init.d/httpd start
/usr/sbin/sshd -D
EOF
chmod 777 /opt/vol/html/init.sh

启动容器,映射端口,挂载数据卷,自动启动多服务

docker container run -d --name="1997sty_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 7fbe0892eda0 /var/www/html/init.sh

centos:7.5.1804_sshd

启动基础镜像容器

docker run -it --name=c75sshd centos:7.5.1804

容器中操作安装ssh

#移走原有文件
mv /etc/yum.repos.d/* /tmp/

#创建新的yum源
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos7.5\ngpgcheck=0">/etc/yum.repos.d/ftp.repo

#用命令让配置生效并安装对应软件
yum makecache fast && yum install openssh-server -y

#初始化sshd服务(第一次会生成密钥对)
mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
/usr/bin/ssh-keygen -A

基于当前容器生成镜像

#生成新的镜像
docker commit afffbc4cb114 1997sty/centos7.5_sshd

#查看镜像
[root@home ~]# docker image ls
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
1997sty/centos7.5_sshd            latest              91315ca27116        4 seconds ago       244 MB

启动容器

  • --name=sshd_222 : 容器命名为sshd_222
  • -p 222:22 : 将容器22端口映射到宿主机222端口
  • /usr/sbin/sshd -D : 启动sshd服务在前台运行,如果使用/etc/init.d/sshd start,执行完命令后容器会直接关闭
docker container run -d --name=sshd_222 -p 222:22 91315ca27116 /usr/sbin/sshd -D

通过Dockerfile定制镜像

  • 创建Dockerfile文件,根据实际操作情况编写文件,执行该文件生成对应镜像
  • 构建镜像过程中每一步都会生成一个临时镜像,以方便构建错误时查看情况

Dockerfile常用指令

文档地址

  • FROM : 指定基础镜像
FROM centos:6.9
FROM centos@2199b8eb8390
  • RUN : 构建镜像过程中运行的命令
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e
  • EXPOSE : 向外暴露的端口
EXPOSE 22
  • CMD : 使用镜像启动容器时运行的命令
CMD ["/usr/sbin/sshd","-D"]
  • COPY : 从dockerfile所在目录,拷贝目标文件到容器的制定目录下,可以支持统配符,如果拷贝的是目录,只拷贝目录下的子文件子目录
COPY init.sh /
  • ADD : 除了COPY命令的功能以外,还可以自动解压.tar*的软件包到目标目录下,可以指定源文件为URL地址
ADD index.tar.gz
ADD https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/adwaita-qt-1.0-1.el7.x86_64.rpm /tmp
  • VOLUME : 使用基映像中指定位置的任何数据初始化新创建的卷
VOLUME ["/var/www/html","/data/mysql/data"]
  • ENV : 设置变量
ENV CODEDIR /var/www/html/
ENV DATADIR /data/mysql/data
ADD bbs.tar.gz ${CODEDIR}
VOLUME ["${CODEDIR}","${DATADIR}"]
  • ENTRYPOINT : 指定在启动容器时第一个进程,不会被手工输入的命令替换掉,防止容器秒起秒关
ENTRYPOINT ["/usr/sbin/sshd","-D"]

Dockerfile的基本使用(centos6.9_sshd)

创建目录并进入

mkdir -p /opt/dockerfile/centos6.9_sshd
cd /opt/dockerfile/centos6.9_sshd

编辑文件导入以下内容

vi 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"]

构建镜像

docker build -t "197sty/centos6.9_sshd:v1.0" ./

查看构建的镜像

[root@home centos6.9_sshd]# docker image ls
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
197sty/centos6.9_sshd             v1.0                93efea3b6b54        18 seconds ago      331 MB

dockerfile构建Lamp基础环境镜像

创建目录并进入

mkdir -p /opt/dockerfile/lamp
cd /opt/dockerfile/lamp

编辑文件导入以下内容

vi 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
COPY init.sh /
ADD index.php /var/www/html/
ADD https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/adwaita-qt-1.0-1.el7.x86_64.rpm /tmp
EXPOSE 22
EXPOSE 80
EXPOSE 3306
CMD ["/bin/bash","/init.sh"]
  • index.php
vi index.php

<?php phpinfo(); ?>
  • init.sh
vi 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

构建镜像

docker build -t "centos6.9_lamp:v1.0" ./

查看构建的镜像

[root@home lamp]# docker image ls
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
centos6.9_lamp                    v1.0                9652a9c1da95        9 seconds ago       437 MB