Docker容器

初识Docker

Docker产生的原因

我们写代码会接触的环境:

1、开发环境–程序员
代码打成war包–部署到测试服务器上
2、测试环境–测试人员 (测试通过)
代码打到war包–给运维人员–运维人员部署到生产环境服务器中
3、生产环境–运维人员
部署再测试,就可以发版了

当我们把开发环境打包的war包发给测试环境的时候会产生代码“”水土不服“的现象”----环境不同(如图,开发环境jdk8而生产环境是jdk7,会报错)

Docker容器_第1张图片
为了解决这种代码水土不服的现象,docker就出现了。
将环境和代码一起发给你,用docker容器装环境和代码,那么测试人员就不用用测试环境的配置,只需要在docker容器中测试,使用开发环境的配置,这样就避免了水土不服。
综上,解决软件跨环境迁移的问题的这个容器就是dockerDocker容器_第2张图片

docker的概念

docker诞生于2013年初,基于Go语言实现,他完全使用沙箱机制,相互隔离。
Docker容器_第3张图片

Docker的安装

基于centos7

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v

Docker架构

仓库--------镜像(静态,文件系统)–容器(镜像运行时的实体) 通过镜像创建容器
包-----------类–对象 通过类创建镜像
镜像来自仓库(中央仓库,私服)
操作docker的命令,就是操作我们的客户端docker发动命令

Docker容器_第4张图片

配置Docker镜像加速器

安装了docker客户端,要从中央仓库中去下载镜像,国外的太慢,我们一般会配置一个镜像加速器。

登录阿里云官网–搜索容器镜像–点击容器镜像服务–点击镜像中心–点击镜像服务–看到专属自己的加速器地址–粘贴到自己的xshell中即可–接下来可以cat一下这个文件
阿里云官网

Docker容器_第5张图片
在这里插入图片描述

Docker命令

docker命令大全–菜鸟教程

Docker服务启动关闭、开机自启命令

启动docker服务
systemctl start docker
停止docker服务
systemctl stop docker
重启docker服务
systemctl restart docker
查看docker服务状态
systemctl status docker
设置开机启动docker服务
systemctl enable docker

Docker镜像相关命令

镜像名称(软件名称)–镜像就是软件和软件所需要的环境打包到这个镜像文件中,将来通过镜像文件创建出容器

TAG(版本号)
IMAGE_ID(镜像ID,标识符)
CREATE(创建时间)
SIZE(大小)

Docker容器_第6张图片

Docker容器相关命令

查看容器

docker ps # 查看正在运行的容器 
docker ps –a # 查看所有容器

创建并启动容器(docker run -it/-id)

docker run 参数

参数说明:
-i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出(exit)容器后,容器自动关闭。
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
–name:为创建的容器命名。

命令1:创建并且运行容器,进入容器后退出,容器关闭

docker run -it --name=c1 redis:5.0 /bin/bash  
解释:创建并启动容器,进入容器内,--name给容器取名字,容器是通过redis5.0版本的镜像创建的。
exit
解释:在容器内执行exit命令,退出容器,容器关闭了。

命令2:以后台方式创建且运行容器,并进入容器后退出,容器没有关闭

docker run -id --name=c2 redis:5.0 /bin/bash  
解释:创建并启动容器,并没有进入容器内,--name给容器取名字,容器是通过redis5.0版本的镜像创建的。
docker exec -it c2 /bin/bash 
解释:进入c2容器内
exit
解释:在容器内执行exit命令,是退出容器,但是容器并没有关闭了。

停止容器

docker stop 容器名称

启动容器

docker start 容器名称

删除容器

如果容器是运行状态则删除失败,需要停止容器才能删除

docker rm 容器名称
查看容器信息
docker inspect 容器名称

展示出的信息里面有

Docker容器_第7张图片HostConfig–Binds:[ /root/data是宿主机的目录,也就是数据:/root/data_container是容器内绑定的目录]
Docker容器_第8张图片Mounts–和上面的HostConfig对应

Docker容器的数据卷

数据卷的作用:

容器数据持久化 外部机器和容器间接通信 容器之间数据交换

什么是数据卷?数据卷和容器的关系?

数据卷是宿主机中的一个目录或者是文件
当容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以同时挂载多个数据卷

配置数据卷

docker run -it或者-id --name=容器名称 –v  宿主机目录(文件):容器内目录(文件)  镜像名称
docker run -it --name=c3 -v /root/data:/root/data_container centos /bin/bash

注意事项:

目录必须是绝对路径
如果目录不存在,则自动创建
可以挂载多个数据卷

应用场景:

1、当容器挂掉的时候,容器中的数据会删除,但是数据卷中的数据不会被删除,在宿主机中仍然保留着挂掉容器的数据,因此当容器恢复的时候可以通过数据卷恢复
2、window系统相当于是一个外部机器,宿主机就是我们的centos虚拟机,容器就是在宿主机内部创建开启的一个容器。
windows系统能不能和容器直接交换文件,因为外部机器和容器不互通,但是外部机器应该是和宿主机相通的。
容器之间数据交互?->数据卷
数据卷是宿主机中的一个目录或文件,容器中也有一个目录,现在是将宿主机和容器中的目录挂载起来,连接起来,那么此时,宿主机中的目录就是数据卷,他们可以相互同步。
容器数据的持久化。
3、容器和容器的通信,也是通过数据卷挂载到同一个宿主机之间进行通信。

一个容器内同步多个数据卷

docker run -it --name=c2 -v  ~/data2:/root/data2  -v  ~/data3:/root/data3 centos

解释:这是一个运行Docker容器的命令,它将在CentOS镜像中创建一个名为c2的容器。其中,-it选项指定了交互式终端,并且–name选项指定了容器的名称为c2。
-v选项用于挂载主机上的目录到容器内的目录。在这个命令中,/data2目录被挂载到容器内的/root/data2目录,/data3目录被挂载到容器内的/root/data3目录。这样可以实现主机和容器之间的文件共享。

~代表/root,只能在宿主机中应用,容器里面不能用~代表/root

数据卷容器

以上让宿主机的目录挂载到容器目录实现文件共享会产生一个问题:麻烦,要写很多个-v 宿主机绝对路径:容器绝对路径,因此我们选择使用一个数据卷容器Data Container去挂载一个数据卷,让其他的容器挂载这个数据卷容器,这就相当于c1,c2挂载到了数据卷中,相当于c1,c2,c3挂载到了数据卷中,他们可以相互通信,即使C3挂了,c1,c2也是挂载在数据卷上的。
Docker容器_第9张图片注意!!!!!!!!!
当我们
命令1:

创建启动c3数据卷容器,使用 –v 绝对路径 c3镜像名称 /bin/bash
docker run –it --name=c3 –v /volume centos:7 /bin/bash
这个/volume是不设置左边宿主机的目录,那么系统会自动给我们分配宿主机目录

命令2:


创建启动 c1 c2 容器,使用 --volumes-from 数据卷容器名 c1镜像名称 /bin/bash
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash 
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

小结

Docker容器_第10张图片

Docker应用部署

MsSQL部署

Docker容器_第11张图片

搜索mysql镜像

docker search mysql

拉取mysql镜像

docker pull mysql:8.0.30

创建容器,设置端口映射、目录映射

在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.30

参数说明:

-p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

成功后,可以在外部机器上面也就是mysql客户端上面去链接docker容器中的mysql,注意这里是需要mysql客户端连接宿主机被docker容器内的mysql映射的那个端口上。主机ip地址是宿主机的ip地址,端口号是被映射的3307。
在这里测试连接的时候,可能会出现提示错误---------- Client does not support authentication protocol requested by server,点击链接看解决办法。

Tomcat部署

搜索tomcat镜像

docker search tomcat

拉取tomcat镜像

docker pull tomcat

创建容器,设置端口映射、目录映射

在/root目录下创建tomcat目录用于存储tomcat数据信息

mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat 

参数说明:

-p 8080:8080:将容器的8080端口映射到主机的8080端口

-v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

接下来要在这个tomcat中加点访问页面,然后我们可以访问宿主机的80端口来借此访问容器中的80端口的这个服务的index.html

Docker容器_第12张图片

"echo"是一个在计算机编程中常用的命令,用于在终端或命令行下打印(输出)文本。它可以将指定的文本或变量的值显示在屏幕上。在不同的编程语言和操作系统中,使用方式可能会有所不同,但基本功能相同。

访问localhost:80/index.html

打包

在打包环境下执行以下操作

 1007  docker images   //查看镜像
 1009  docker pull docker.das-security.cn/dipper-app:3.6-release    //更新镜像
 1010  docker images docker
 1011  docker save  docker.das-security.cn/dipper-app:3.6-release > dipper-app.release.3.6.0719.tar     //打包镜像为一个tar包 >表示文件是什么样子的,0719是日期

接下来用xftp传输这个tar包到外部机器,然后再连接其他服务器,从外部机器中传递这个包到该服务器。
将镜像save之后要把它load读取出来,

docker load < dipper-app.release.3.6.0719.tar

查看镜像

docker images

然后重启docker服务
注意,这里的重启必须要在正确的目录下重启,比如说我的项目下是在/home目录中,那么我应该是在/home下的dipper目录下进行重启服务

docker-compose up -d

等个几分钟,让服务彻底跑起来。

更新主平台

//进入有docker-compose的目录

cd /dipper-data/dipper/dipper-deploy/

//拉取镜像,重启服务

docker-compose pull && docker-compose up -d

停止服务,启动服务(重启平台)

docker-compose down
docker-compose up -d

单独重启docker-compose的其中一个容器

docker-compose restart worker

你可能感兴趣的:(Docker,docker,容器,运维)