Docker容器个人理解

标准的Docker容器一般都是由debain系统做基础镜像构成的,说白了就是当我们使用docker pull xxx下拉某个镜像时,默认官网都是由debain系统做基础标准镜像的,不管你是tomcat还是mysql等等。只要是官网标准镜像都是由debain系统做基础镜像构成的,有同学可能会问那centos或者Red Hat就没有吗?问的好,不是没有而是官方会有专门团队来维护标准镜像(debain)至于centos或者Red Hat等等,大部分为个人制作的镜像,不会有专门维护的团队,所以在真实环境建议还是使用官方的标准镜像。

Docker容器安装软件或命令的原因

镜像生成容器才能为我们提供服务,但是默认的官网镜像所生成的容器是基础镜像,说白了就是里边除了基本系统必要命令和内核命令外,什么都没有,那么问题来了,我们怎么去管理这个容器里的服务呢?怎么去配置这个容器里的配置文件呢?
解决方式有两种:

1、 通过docker镜像生成容器时将需要的配置文件、数据目录、访问端口等等映射到真机

2、 给容器里的系统安装一些基础的命令比如vim、ps等;软件telnet远程连接等。

注:为了使容器变得不越来越臃肿,便于迁移、备份等管理;建议不管使用哪种方式,都将一些重要的数据目录、配置文件目录等等,挂载到宿主机的目录到容器内!

实验环境

系统版本:centos7x3.10.0-514.el7.x86_64

Docker版本:Docker version 1.13.1(yum安装)

Docker镜像:docker.io/mysql:latest

关闭防火墙并禁止开机自启
systemctl stop firewalld.service
systemctl disable firewalld

关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

重启 reboot

Docker容器

1、查看当前镜像列表

docker images
Docker容器安装telnet

2、查看当前所有容器

docker ps -a
Docker容器安装telnet

3、 通过docker.io/mysql镜像生成容器

docker run -itd -p 3306:3306 --name wfy_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
Docker容器安装telnet_第1张图片
选项注释:
-itd: 交互运行容器并可以在后台运行容器
-p:端口映射,此处映射主机3306端口到容器mysql的3306端口
--name:给新创建的容器命名,这里最好用项目名加mysql做区别如wfy_mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
mysql:最后一个mysql指的是mysql镜像名字,也可以指定版本标记。

4、查看正在运行的容器

docker ps
Docker容器安装telnet

5、进入容器查看命令

docker exec -it c8 /bin/bash
Docker容器安装telnet_第2张图片
Docker容器安装telnet_第3张图片
注:从以上截图可以看的出来,大部分常用的命令在容器里默认都没有!

Docker容器安装命令或软件telnet

1、查看当前镜像列表

docker images
Docker容器安装telnet

2、查看所有容器

docker ps -a
Docker容器安装telnet

3、查看正在运行的容器

docker ps
Docker容器安装telnet

4、 停止正在运行的容器

docker stop c8
Docker容器安装telnet_第4张图片
注:如上截图的目的是为了释放mysql的3306端口,也可以映射别的端口做测试!

5、创建dockerfile文件

vi dockerfile

FROM docker.io/mysql
MAINTAINER [email protected]
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
RUN apt-get update
RUN apt-get install vim -y
RUN apt-get install iputils-ping -y
RUN apt-get install net-tools -y
RUN apt-get install telnetd-ssl -y
RUN apt-get install xinetd -y
RUN apt-get install telnetd -y

Docker容器安装telnet_第5张图片
注:如上截图,我们要想给容器安装软件有两种方式,一种是通过dockerfile文件打包镜像;另一种是直接在容器里安装软件,个人建议使用dockerfile文件来安装,因为这是官网的方式,所以我这里也是使用这种方式安装的!

6、打包生成镜像

docker build . -t mysql:v1
Docker容器安装telnet_第6张图片
Docker容器安装telnet_第7张图片
注:以上截图为开始和结束的两张截图,中间太长就不截图了!

7、 查看所有镜像

docker images
Docker容器安装telnet
注:从截图中可以看到自己打包的镜像已经生成了。

8、 运行新镜像

docker run -itd -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:v1
Docker容器安装telnet_第8张图片
注:因为新镜像名字已经在做镜像时就写了mysql:v1所以后边要是启动指定的镜像生成容器,那么在最后写上镜像名即可!例如镜像tomcat-demo的镜像名为tomcat-demo:v1。当然了要是从官网直接下拉的镜像如上图docker.io/tomcat或者docker.io/mysql后边标签写的是latest的不需要写标签也能直接启动。

9、 进入新容器

docker exec -it 49 /bin/bash
Docker容器安装telnet

10、 验证安装的命令 vim、ping和netstat

Docker容器安装telnet
注:从以上截图可以看出容器安装命令完成了!

11、验证安装的软件telnet

1)查看本地IP端口开启

nmap 192.168.152.169
Docker容器安装telnet_第9张图片

2)查看容器真机开放端口(当前机器IP为192.168.152.91)

nmap 容器真机IP
Docker容器安装telnet_第10张图片
注:容器真机IP为192.168.152.169

3)telnet远程连接容器3306端口(当前机器IP为192.168.152.91)

telnet 192.168.152.169 3306
Docker容器安装telnet_第11张图片
注:显示乱码表示连接正常,因为telnet只有测试端口是否开启的功能。到这里telnet软件安装就完成了!