环境准备

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.
root@172.17.0.2'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.
root@172.17.0.2'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
root@172.17.0.3'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

docker-02的更多相关文章

  1. Docker 02 - 向 Docker 的 Tomcat 镜像中部署 Web 应用

    目录 1 下载 Docker 镜像 2 部署Web项目 2.1 通过Dockerfile自定义项目镜像 2.2 启动自定义镜像, 生成一个容器 2.3 另一种启动方式: 交互式启动 3 (附) 向镜像 ...

  2. Docker 02 基本命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  3. K8S 使用Kubeadm搭建单个Master节点的Kubernetes(K8S)~本文仅用于测试学习

    01.集群规划 系统版本:CentOS Linux release 7.6.1810 (Core) 软件版本:kubeadm.kubernetes-1.15.docker-ce-18.09 硬件要求: ...

  4. Docker系列02—Docker 网络模式

    一.Docker的四种网络模式 1.Docker 的四种网络模式: Bridge container 桥接式网络模式 Host(open) container 开放式网络模式 Container(jo ...

  5. Docker系列02—LXC---Docker的“前身”

    本文收录在容器技术学习系列文章总目录 一.LXC介绍 1.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源. 2.LXC为Linux Containe ...

  6. Docker入门02——Dockerfile详解

    基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOINT ENV EXPOSE VOLUME WORKDIR USER ARG 基本示例 # Thi ...

  7. 02: docker高级篇

    1.1 Docker Compose 1.Docker Compose 介绍 1. Compose是一个定义和管理多容器的工具,使用Python语言编写. 2. 使用Compose配置文件描述多个容器 ...

  8. Docker容器学习与分享02

    1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像( ...

  9. Docker系列02: 容器生命周期管理 镜像&容器

    A) Docker信息1. 查看docker运行状态 systemctl status docker docker.service - Docker Application Container Eng ...

  10. Docker入门系列02

    上篇用一个简单的示例,简单的介绍了 Dockerfile 的配置及其相关的命令.这一篇会在上篇的示例程序里,继续添加新代码及如何将单元测试也放入 Image 建立过程内. 首先,我们需要建一个新的类库 ...

随机推荐

  1. 企业该选择什么样的CRM系统

    不论您是需要CRM系统来优化业务流程,还是准备更换一款新的CRM系统,在这之前都应该先明确企业的需求,并了解CRM的哪些功能能够对企业有所帮助.例如,企业的管理者想了解每个销售人员的业绩情况,那么就应 ...

  2. Centos-Springboot项目jar包自启动

    CentOS环境下部署Springboot项目的jar包开机自启动. 部署环境 Centos 7.5 Springboot 2.1.x 操作步骤 修改pom 在pom.xml文件中<plugin ...

  3. redis广播/订阅模式演示

    参考博客 http://www.pianshen.com/article/7183315879/ 1.首先在本地启动redis服务 2.启动4个客户端 redis-cli 3.将其中三个客户端设置监听 ...

  4. springcloud gateway(hystrix filter)

    参考 https://blog.csdn.net/forezp/article/details/83792388 1.依赖pom.xml <project xmlns="http:// ...

  5. 《Linux基础知识及命令》系列分享专栏

    <Linux基础知识及命令>系列分享专栏 本专题详细为大家讲解了Linux入门基础知识,思路清晰,简单易懂.本专题非常适合刚刚学习Linux的小白来学习,通过学习该专题会让你由入门达到中级 ...

  6. WPF下如何使用TTF字体

    之前再写代码的时候如果遇到了图标,我都喜欢再资源文件下创建JPG或者PNG来作为图片. 但是随着TTF字体图标的普及,图标类型的的图片越来越多的被放入到TTF中. 这篇也主要是写再WPF下如何使用TT ...

  7. 测试基础(四)Jmeter基础使用

    前言 通过测试基础(三) Jmeter安装 - 大风北吹 - 博客园 (cnblogs.com)安装完成Jmeter后,就可以使用Jmeter进行性能测试. 一.线程组 (1).线程组分类 Jmete ...

  8. 「AGC032E」 Modulo Pairing

    「AGC032E」 Modulo Pairing 传送门 如果所有数都 \(<\lfloor \frac m 2\rfloor\),一个自然的想法是对所有数排序过后大小搭配,这样显然是最优秀的. ...

  9. VRRP概述作用及配置

    文章目录 VRRP的概述 VRRP的作用 虚拟路由器 Master报文的发送 VRRP状态机 VRRP华为命令配置 VRRP的概述1.利用VRRP,一组路由器(同一个LAN中的接口),协同工作,但是只 ...

  10. [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator

    [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (18) --- kube ...