Docker实战(精简版本)

一、Docker 简介:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

什么是Docker?

在这里插入图片描述

Docker特点:

  • (1)上手快
  • (2)职责的逻辑分类
  • (3)快速高效的开发生命周期
  • (4)鼓励使用面向服务的架构

Docker组件:

Docker客户端和服务器

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
在这里插入图片描述

二、Docker安装与启动

在VMware Workstation中安装CentOS7

使用ip addr命令查看本地IP:

 ip addr

使用yum命令在线安装Docker:

yum install docker

安装后查看Docker版本:

docker -v

启动与停止Docker

前提:docker是一个C/S架构,操作docker必须先启动docker 服务端
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。

  • 启动docker:
systemctl start docker
  • 停止docker:
systemctl stop docker
  • 重启docker:
systemctl restart docker
  • 查看docker状态:
systemctl status docker
  • 开机启动:
systemctl enable docker

三、 Docker镜像操作

列出docker下的所有镜像:

docker images

在这里插入图片描述

  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小
  • 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
    在这里插入图片描述
    搜索镜像:
docker search 镜像名称

在这里插入图片描述

  • NAME:仓库名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

使用命令拉取镜像:

docker pull centos:7

查看所有镜像:

docker images

添加ustc的镜像
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

步骤:

  • (1)编辑该文件:vi /etc/docker/daemon.json //
    如果该文件不存在就手动创建;说明:在centos7.x下,通过vi。
  • (2)在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

(3)注意:一定要重启docker服务,如果重启docker后无法加速,可以重新启动OS
然后通过docker pull命令下载镜像:速度杠杠的。

  • 删除指定镜像
docker rmi $IMAGE_ID

查看zookeeper镜像是否已经删除:
在这里插入图片描述
删除所有镜像

docker rmi `docker images -q`

操作原理:先查询出所有镜像ID ,在进行删除

列出所有镜像ID

docker images -q 

四、 Docker容器操作

查看容器

查看正在运行容器:

docker ps

查看所有的容器(启动过的历史容器):

docker ps -a

查看最后一次运行的容器:

docker ps –l

查看停止的容器:

docker ps -f status=exited

创建与启动容器

创建容器常用的参数说明:

创建容器命令:

docker run
  • -i:表示运行容器

  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

  • –name :为创建的容器命名。

  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

交互式容器

原理:创建容器并进入容器,退出容器,服务停止。
创建一个交互式容器并取名为mycentos

docker run -it --name=mycentos centos:7 /bin/bash

注:–name=mycentos指的是容器名称 centos:7 镜像名称 执行命令完成后,就已经进入centos7容器了,和宿主机centos7一样,只不过一个是宿主机,另一个是容器而已。
复制会话,这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
执行命令:docker ps
在这里插入图片描述
使用exit命令 退出当前容器

然后用ps -a 命令查看发现该容器也随之停止:

守护式容器

前提:创建容器,不进行容器,后台启动,只要不关闭容器,容器就一直处于启动状态。
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):

docker run -di --name=mycentos1 centos:7

在这里插入图片描述
查看容器是否启动:
在这里插入图片描述
登录守护式容器方式:

docker exec -it container_name (或者 container_id)  /bin/bash

(exit退出时,容器不会停止)
在这里插入图片描述
退出容器:
在这里插入图片描述
查看状态:
在这里插入图片描述
从图中可以看出,exit退出容器,mycentos1容器,还是可以正常处于启动状态。

停止与启动容器

停止正在运行的容器:

docker stop $CONTAINER_NAME/ID

在这里插入图片描述
执行命令容器停止后,查看容器启动状态:
在这里插入图片描述
启动已运行过的容器:

docker start $CONTAINER_NAME/ID

前提:先查看那些容器启动过

查看启动过的容器:

docker ps -a 

在这里插入图片描述
在执行启动以前启动过的容器命令:

docker start mycentos1

在这里插入图片描述

文件拷贝

前提:容器服务必须启动才可以进行文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

案例演示:
在宿主机上创建/testfile文件:
执行命令:

echo 123 > testfile

在这里插入图片描述
把宿主机testfile文件复制到mycentos1 /usr/loca目录下:
执行命令:

docker cp testfile mycentos1:/usr/local 

在这里插入图片描述
登录容器查看文件在/usr/lcoal目录下面是否存在:
登录mycentos1容器:
在这里插入图片描述
在这里插入图片描述
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
案例演示:
先把宿主机上的testfile文件删除,在从mycentos1容器中将mycentos1 /usr/lcoal 目录下面的testfile文件复制到宿主机上。
第一步:删除宿主机上的testfile文件:
在这里插入图片描述
第二步:将mycentos1容器中将mycentos1 /usr/lcoal 目录下面的testfile文件复制到宿主机上。
执行命令:

docker cp mycentos1:/usr/local/testfile newTestfile
docker cp mycentos1:/usr/local/test2 /usr

格式:docker cp 容器名:目录下的文件/目录 文件名/目录名
在这里插入图片描述
注:后台的文件名如果不一致,代表重命名

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7

格式1:docker run -di -v 宿主机目录:容器目录 –name=新的容器名 镜像名称:tag
格式2:docker run -di –name=新的容器名 -v 宿主机目录:容器目录 镜像名称:tag
案例演示01:
1、在宿主机/usr/local/myhtml创建目录:
在这里插入图片描述
2、创建一个新的容器与宿主机进行目录挂在,也就是目录共享,改变宿主机挂在目录下的文件,容器中的文件随之改变。
执行命令:

docker run -di --name=mycentos2 -v /usr/local/myhtml/:/usr/local/nh centos:7

格式:docker run -di --name=新的容器名 -v 宿主机目录:容器目录 镜像名称:tag
在这里插入图片描述
查看刚启动的容器:
在这里插入图片描述
登录容器,查看在/usr/lcoal容器目录下面是否存在nh目录:
在这里插入图片描述
在宿主机的/usr/local/myhtml目录下,添加index.html文件:
在这里插入图片描述
登录容器,查看在,mycentos2容器的/usr/local/nh/目录下面是否存在index.html
在这里插入图片描述
案例演示02(重点):
上传cas文件夹到宿主机挂载目录/usr/local/myhtml下面,登录容器,查看文件?
在这里插入图片描述
先查看运行的容器,登录容器,查看:
在这里插入图片描述
注:如果你共享的是多级的目录,可能会出现权限不足的提示。
解决方案:这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

docker run -di --name=mycentos3 -v /usr/local/myhtml/:/usr/local/mh --privileged=true centos:7

在这里插入图片描述
查看容器是否启动:
在这里插入图片描述
登录容器,查看文件是否有权限:
在这里插入图片描述
可以正常查看文件!!!
在这里插入图片描述
4.6查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据

docker inspect mycentos2

在这里插入图片描述
注:此命令需要在宿主机上执行,容器内部无效。
在这里插入图片描述
也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2

在这里插入图片描述
4.7删除容器
删除指定的容器:

docker rm $CONTAINER_ID/NAME

在这里插入图片描述
注意,只能删除停止的容器
效果图:
在这里插入图片描述
删除所有容器:

docker rm `docker ps -a -q`

在这里插入图片描述

五、部署应用

5.1 MySQL部署
5.1.1拉取MySQL镜像

docker pull mysql

在这里插入图片描述
查看镜像
在这里插入图片描述
5.1.2创建MySQL容器

docker run -di –name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

在这里插入图片描述
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
5.1.3进入MySQL容器,登陆MySQL
进入mysql容器

docker exec -it pinyougou_mysql /bin/bash

在这里插入图片描述
在容器中,登陆mysql

mysql -u root -p

在这里插入图片描述
在容器中,退出mysql,然后从容器中退出到宿主机:
在这里插入图片描述
查看,正在运行的容器:
在这里插入图片描述
5.1.4远程登陆MySQL
(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.45.13是虚拟机操作系统的IP
在这里插入图片描述
(2)在本地客户端执行建库脚本
执行“资源/建库语句/pinyougoudb.sql”
在这里插入图片描述
(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.45.142是虚拟机操作系统的IP
在这里插入图片描述

(2)在本地客户端,创建数据库病,执行建库脚本
执行“资源/建库语句/pinyougoudb.sql”

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.1.5查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect pinyougou_mysql
在这里插入图片描述
运行效果如下:
在这里插入图片描述
我们可以看到我们的数据库服务器的IP是172.17.0.3
5.2 tomcat部署
5.2.1拉取tomcat镜像
docker pull tomcat:7-jre7
5.2.2创建tomcat容器
创建容器用于部署单点登录系统(CAS) -p表示地址映射:
docker run -di --name=pinyougou_tomcat -v /usr/local/myhtml/:/usr/local/tomcat/webapps --privileged=true -p 9000:8080 tomcat:7-jre7

docker run -di --name=pinyougou_tomcat -v /usr/local/myhtml/:/usr/local/tomcat/webapps --privileged=true -p 9000:8080 tomcat:7-jre7

格式:
–privileged=true :权限赋予
9000:8080:端口映射
7-jre7 指:tag
在这里插入图片描述
查看tomcat容器启动状态:docker ps
在这里插入图片描述
浏览器验证:
http://192.168.45.142:9000/cas/login
在这里插入图片描述

5.2.3部署web应用
(1)修改cas系统的配置文件,修改数据库连接的url

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		p:driverClass="com.mysql.jdbc.Driver"
		p:jdbcUrl="jdbc:mysql://172.17.0.3:3306/pinyougoudb?characterEncoding=utf8"
		p:user="root"
		p:password="root" />

测试:地址栏输入:http://192.168.45.142:9000/cas/login
tomcat和mysql联通:
在这里插入图片描述
在这里插入图片描述
5.3 Nginx部署
5.3.1拉取Nginx镜像
docker pull nginx
5.3.2创建Nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx/bin/bash
在这里插入图片描述
在这里插入图片描述
5.3.3测试Nginx
浏览器地址栏输入: http://192.168.45.142
在这里插入图片描述
5.3.4配置反向代
官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。
在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。
(1)从容器拷贝配置文件到宿主机

docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf 

在这里插入图片描述

查看容器中是否有这个文件:
在这里插入图片描述
在这里插入图片描述
(2)编辑nginx.conf,添加反向代理配置
前提:查看tomcat端口:
在这里插入图片描述

upstream tomcat-cas {
    	server 172.17.0.4:8080;
    }
    server {
    	listen 80;
    	server_name passport.pinyougou.com;
    	location / {
    		proxy_pass http://tomcat-cas;
    		index index.html index.htm;
    	}
    }

(3)将修改后的配置文件拷贝到容器

docker cp nginx.conf  pinyougou_nginx:/etc/nginx/nginx.conf

在这里插入图片描述
(4)重新启动容器

docker restart pinyougou_nginx

在这里插入图片描述
(5)设置域名指向
192.168.45.142 passport.pinyougou.com
浏览器测试:http:// passport.pinyougou.com/cas/login
在这里插入图片描述
5.4 Redis部署
5.4.1拉取Redis镜像

docker pull redis

5.4.2创建Redis容器

docker run -di --name=pinyougou_redis -p 6379:6379 redis

5.4.3客户端测试
在你的本地电脑命令提示符下,用window版本redis测试

redis-cli -h 192.168.247.135

六、备份与迁移

6.1容器保存为镜像
我们可以通过以下命令将容器保存为镜像

docker commit pinyougou_nginx mynginx
  • pinyougou_nginx是容器名称
  • mynginx是新的镜像名称

此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
6.2镜像备份

docker  save -o mynginx.tar mynginx

-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包
6.3镜像恢复与迁移
首先我们先删除掉mynginx镜像
然后执行此命令进行恢复

docker load -i mynginx.tar

-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复

猜你喜欢

转载自blog.csdn.net/weixin_40816738/article/details/90169007