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、查看当前镜像列表
2、查看当前所有容器
3、 通过docker.io/mysql镜像生成容器
docker run -itd -p 3306:3306 --name wfy_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
选项注释:
-itd: 交互运行容器并可以在后台运行容器
-p:端口映射,此处映射主机3306端口到容器mysql的3306端口
--name:给新创建的容器命名,这里最好用项目名加mysql做区别如wfy_mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
mysql:最后一个mysql指的是mysql镜像名字,也可以指定版本标记。
4、查看正在运行的容器
5、进入容器查看命令
docker exec -it c8 /bin/bash
注:从以上截图可以看的出来,大部分常用的命令在容器里默认都没有!
Docker容器安装命令或软件telnet
1、查看当前镜像列表
2、查看所有容器
3、查看正在运行的容器
4、 停止正在运行的容器
docker stop c8
注:如上截图的目的是为了释放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
注:如上截图,我们要想给容器安装软件有两种方式,一种是通过dockerfile文件打包镜像;另一种是直接在容器里安装软件,个人建议使用dockerfile文件来安装,因为这是官网的方式,所以我这里也是使用这种方式安装的!
6、打包生成镜像
docker build . -t mysql:v1
注:以上截图为开始和结束的两张截图,中间太长就不截图了!
7、 查看所有镜像
docker images
注:从截图中可以看到自己打包的镜像已经生成了。
8、 运行新镜像
docker run -itd -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:v1
注:因为新镜像名字已经在做镜像时就写了mysql:v1所以后边要是启动指定的镜像生成容器,那么在最后写上镜像名即可!例如镜像tomcat-demo的镜像名为tomcat-demo:v1。当然了要是从官网直接下拉的镜像如上图docker.io/tomcat或者docker.io/mysql后边标签写的是latest的不需要写标签也能直接启动。
9、 进入新容器
10、 验证安装的命令 vim、ping和netstat
11、验证安装的软件telnet
1)查看本地IP端口开启
2)查看容器真机开放端口(当前机器IP为192.168.152.91)
nmap 容器真机IP
注:容器真机IP为192.168.152.169
3)telnet远程连接容器3306端口(当前机器IP为192.168.152.91)
telnet 192.168.152.169 3306
注:显示乱码表示连接正常,因为telnet只有测试端口是否开启的功能。到这里telnet软件安装就完成了!