docker-02
环境准备
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.
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代码到宿主机 /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的更多相关文章
- Docker 02 - 向 Docker 的 Tomcat 镜像中部署 Web 应用
目录 1 下载 Docker 镜像 2 部署Web项目 2.1 通过Dockerfile自定义项目镜像 2.2 启动自定义镜像, 生成一个容器 2.3 另一种启动方式: 交互式启动 3 (附) 向镜像 ...
- Docker 02 基本命令
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
- K8S 使用Kubeadm搭建单个Master节点的Kubernetes(K8S)~本文仅用于测试学习
01.集群规划 系统版本:CentOS Linux release 7.6.1810 (Core) 软件版本:kubeadm.kubernetes-1.15.docker-ce-18.09 硬件要求: ...
- Docker系列02—Docker 网络模式
一.Docker的四种网络模式 1.Docker 的四种网络模式: Bridge container 桥接式网络模式 Host(open) container 开放式网络模式 Container(jo ...
- Docker系列02—LXC---Docker的“前身”
本文收录在容器技术学习系列文章总目录 一.LXC介绍 1.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源. 2.LXC为Linux Containe ...
- Docker入门02——Dockerfile详解
基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOINT ENV EXPOSE VOLUME WORKDIR USER ARG 基本示例 # Thi ...
- 02: docker高级篇
1.1 Docker Compose 1.Docker Compose 介绍 1. Compose是一个定义和管理多容器的工具,使用Python语言编写. 2. 使用Compose配置文件描述多个容器 ...
- Docker容器学习与分享02
1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像( ...
- Docker系列02: 容器生命周期管理 镜像&容器
A) Docker信息1. 查看docker运行状态 systemctl status docker docker.service - Docker Application Container Eng ...
- Docker入门系列02
上篇用一个简单的示例,简单的介绍了 Dockerfile 的配置及其相关的命令.这一篇会在上篇的示例程序里,继续添加新代码及如何将单元测试也放入 Image 建立过程内. 首先,我们需要建一个新的类库 ...
随机推荐
- PostgreSQL用户和权限问题
PostgreSQL用户 其实用户和角色都是角色,只是用户是具有登录权限的角色. 创建用户 create user sonar password '123'; 删除用户 drop user sonar ...
- 资源:Navicat15最新版本破解 亲测可用(2020-11-14)
1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装 2.网盘下载破解 本人网盘链接:https://pan.baidu.com/s/ ...
- SQL 查询并不是从 SELECT 开始的
原文地址:SQL queries don't start with SELECT 原文作者:Julia Evans(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...
- C语言:清空缓冲区
缓冲区的优点很明显,它加快了程序的运行速度,减少了硬件的读写次数,让整个计算机变得流畅起来:但是,缓冲区也带来了一些负面影响,经过前面几节的学习相信读者也见识到了.那么,该如何消除这些负面影响呢?思路 ...
- 使用BeautifulSoup自动爬取微信公众号图片
爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...
- Java基础00-分支语句6
1. 流程控制 1.1 流程控制语句概述 1.2 流程控制语句分类 1.3 顺序结构 2. if语句 2.1 if语句格式1 适合一种情况的判断 执行流程图: 2.2 if语句格式2 适合两种情况的判 ...
- 12、Java——异常
1.异常处理方案: 异常抛出 : throws 把异常抛出到上一层,谁调用谁解决 异常捕获 : try..catch try{ 有可能出现异常的代码; }catch(FileNotFoundEx ...
- 常用的jquery加载后执行的写法
(function(doc){ })(document); $(function(){ }) jQuery(function(){ }) $(document).ready(function(){ } ...
- bash对一个目录中文件名的遍历
for var in * 对当前目录中文件名的遍历 for var in /xx/xx/* 对绝对路径目录的遍历 ${var##*/} 变量扩展取文件名的基名 $var =~ ^[0-9] ...
- Java多线程(下)
线程同步 当多个线程访问一个对象时,有可能会发生污读,即读取到未及时更新的数据,这个时候就需要线程同步. 线程同步: 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线 ...