环境准备

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. PostgreSQL用户和权限问题

    PostgreSQL用户 其实用户和角色都是角色,只是用户是具有登录权限的角色. 创建用户 create user sonar password '123'; 删除用户 drop user sonar ...

  2. 资源:Navicat15最新版本破解 亲测可用(2020-11-14)

    1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装 2.网盘下载破解 本人网盘链接:https://pan.baidu.com/s/ ...

  3. SQL 查询并不是从 SELECT 开始的

    原文地址:SQL queries don't start with SELECT 原文作者:Julia Evans(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  4. C语言:清空缓冲区

    缓冲区的优点很明显,它加快了程序的运行速度,减少了硬件的读写次数,让整个计算机变得流畅起来:但是,缓冲区也带来了一些负面影响,经过前面几节的学习相信读者也见识到了.那么,该如何消除这些负面影响呢?思路 ...

  5. 使用BeautifulSoup自动爬取微信公众号图片

    爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...

  6. Java基础00-分支语句6

    1. 流程控制 1.1 流程控制语句概述 1.2 流程控制语句分类 1.3 顺序结构 2. if语句 2.1 if语句格式1 适合一种情况的判断 执行流程图: 2.2 if语句格式2 适合两种情况的判 ...

  7. 12、Java——异常

    ​  1.异常处理方案: 异常抛出 : throws 把异常抛出到上一层,谁调用谁解决 异常捕获 : try..catch try{ 有可能出现异常的代码; }catch(FileNotFoundEx ...

  8. 常用的jquery加载后执行的写法

    (function(doc){ })(document); $(function(){ }) jQuery(function(){ }) $(document).ready(function(){ } ...

  9. bash对一个目录中文件名的遍历

    for var in *      对当前目录中文件名的遍历 for var in /xx/xx/* 对绝对路径目录的遍历 ${var##*/}  变量扩展取文件名的基名 $var =~ ^[0-9] ...

  10. Java多线程(下)

    线程同步 当多个线程访问一个对象时,有可能会发生污读,即读取到未及时更新的数据,这个时候就需要线程同步. 线程同步: 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线 ...