2021-09-26 Docker运维

Docker技术简介

Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

Docker基本操作

 启动docker服务: systemctl start docker
 停止docker服务: systemctl stop docker
 重新启动Docker服务:  systemctl restart docker
 查看Docker状态: systemctl status docker
 设置Docker开机自启: systemctl enable docker
 禁用Docker开机自启: systemctl disable docker
 查看Docker信息: docker info
 查看docker info中具体key的信息: docker info | grep 'Docker Root Dir:'

Docker镜像加速

由于国内网络问题,需要配置加速器来加速
修改配置文件 /etc/docker/daemon.json
下面命令直接生成文件 daemon.json

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

说明:在执行如上指令时,保证你的登录用户为管理员用户(#:表示管理员用户 $:表示普通用户),并且设置好以后重启docker服务

# 重新加载docker配置
sudo systemctl daemon-reload

#重启docker服务
sudo systemctl restart docker

Docker镜像操作

Docker 镜像是一组静态磁盘文件,可以任意下载、复制、分发。从镜像可以运行启动容器(Docker的虚拟计算机)。
在这里插入图片描述
从镜像仓库 https://hub.docker.com 下载镜像:

下载镜像: docker pull 镜像名(repository:tag)
浏览镜像文件: docker images
查看镜像详情: docker inspect 镜像名或镜像id
查看镜像历史: docker history 镜像名
删除镜像文件: docker image rm 镜像名或镜像id
			 docker rmi 镜像名或镜像id
			 
导出镜像文件: 
# 把两个镜像 redis:latest 和 centos:8 导出,并压缩到 imgs.gz
docker save redis:latest centos:8 | gzip > imgs.gz

导入镜像操作:
# 要在 imgs.gz 文件所在目录下执行
docker load -i imgs.gz
docker load < imgs.gz

运行镜像文件: 
#基于镜像,启动容器运行
docker run 镜像名

Docker容器操作

从一个镜像可以运行启动一个或多个容器
所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用

`创建并启动容器`
docker run -it xxxx bash
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)

`启动一个临时容器`
docker run -d --rm --name tmp --restart=always 镜像名
1)--rm 在容器停止时自动删除容器
2)--name 每个启动的容器都可以指定一个名称
3)--restart=always 容器可以随系统自动启动

把容器的 server.xml 复制到宿主机的 /root/ 目录下
docker cp tmp:/usr/local/tomcat/conf/server.xml  /root/

后台运行启动容器: docker run -d 镜像名
查看docker运行中的容器: docker ps
查看docker中的容器: docker ps -a
查看容器详情: docker inspect 容器名或容器id
查看容器日志信息: docker (container) logs 802 #802为容器id
停止运行的容器: docker (container) stop 802
重新启动容器: docker (container) restart 802
进入指定容器(后台运行时): docker exec -it 802 bash 
删除容器: docker (container) rm 802 #删除运行中的容器,需要添加 -f 参数
删除所有停止状态容器: docker container prune
删除所有容器: docker rm -f $(docker ps -aq)
查看tomcat镜像历史
docker history tomcat

在这里插入图片描述
启动容器时覆盖 ENTRYPOINT 和 CMD
覆盖 CMD:
以 tomcat 镜像为例,镜像中设置的默认命令是 catalina.sh run,可以任意指定命令覆盖这个默认命令,这里执行 ls -a -l 来测试:

docker run tomcat ls -a -l

覆盖 ENTRYPOINT:
–entrypoint:设置运行的命令,不许写在镜像名称 tomcat 的后面,注意,这里不能添加命令的参数;
镜像名称 tomcat 后面的内容会覆盖 CMD

docker run --entrypoint ls tomcat -a -l

两项设置的内容连接起来作为一个完整的命令 ls -a -l

Docker数据挂载

目录挂载

在这里插入图片描述
在启动容器时,以目录直接挂载的方式进行数据操作

docker run -it -v /usr/app:/opt/app centos:7 bash

1)/usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。(通过 -v 参数可以挂载文件、目录和数据卷)

数据卷挂载

数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除(实际上也是通过主机目录进行挂载)

创建数据卷: docker volume create container-vol
查看所有数据卷: docker volume ls
查看指定数据卷的信息: docker (volume) inspect container-vol
查询的结果:
			[
			    {
			        "Driver": "local",
			        "Labels": {},
			        "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
			        "Name": "container-vol",
			        "Options": {},
			        "Scope": "local"
			    }
			]
把数据卷 container-vol 挂载到容器的 /root 目录:
docker run -it -v container-vol:/root centos:7 bash
删除数据卷(如果数据卷被容器使用则无法删除): docker (volume) rm container-vol
清理无主数据卷: docker volume prune

容器互联(网络)

Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯
Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络

端口映射

在这里插入图片描述

docker run -d -p 80:8080 tomcat

虚拟网络

在 Docker 中可以创建任意多个虚拟网络,容器之间可以通过虚拟网络互联互通,创建虚拟网络时宿主机也会连接到虚拟网络
在这里插入图片描述

新建网络: docker network create (-d bridge) t-net  #-d driver,网络类型,默认 bridge
列出所有网络: docker network ls
查看网络信息: docker inspect 网络名或网络id
查看宿主机新建的虚拟网卡: ifconfig
查询的结果:
			br-ef94bf92552d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
			        inet 172.18.0.1  netmask 255.255.255.0  broadcast 172.18.0.255
			        inet6 fe80::42:eeff:fe8d:afdf  prefixlen 64  scopeid 0x20<link>
			        ether 02:42:ee:8d:af:df  txqueuelen 0  (Ethernet)
			        RX packets 0  bytes 0 (0.0 B)
			        RX errors 0  dropped 0  overruns 0  frame 0
			        TX packets 13  bytes 1102 (1.0 KiB)
			        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
新建两个容器 app1 和 app2,连接到虚拟网络 t-net:
docker run -d --name app1 --net(work) t-net tomcat
docker run -d --name app2 --net(work) t-net tomcat
查看两个容器的虚拟网络ip:
docker inspect app1  #172.18.0.2
docker inspect app2  #172.18.0.3
从宿主机ping两个容器:
ping 172.18.0.2
ping 172.18.0.3
从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境:
docker exec -it app1 ping app2

Dockerfile及镜像制作

Dockerfile (注意文件的大小写)是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,类似于一个批处理文件,用来设置镜像的构建流程,我们通常会基于此文件创建docker镜像
在这里插入图片描述
制作Sentinel镜像

  1. 准备工作
    centos:7镜像
    jdk-8u51-linux-x64.tar.gz
    sentinel-dashboard-1.8.0.jar
    说明: 通过docker images指令查看centos:7是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)
  2. 构建Sentinel镜像
    第一步:在sentinel所在目录创建Dockerfile文件,并添加如下内容:
# 选择基础镜像
FROM centos:7

# jdk 和 sentinel 文件添加到镜像的 /usr/local/ 目录下
# ADD 指令会自动解压文件
ADD jdk-8u51-linux-x64.tar.gz sentinel-dashboard-1.8.0.jar /usr/local/

# 设置环境变量
# 通过echo $PATH查看环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH

# EXPOSE 8080 对外暴露的服务端口,只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
# 这个声明有两个好处:
#   1.帮助镜像使用者理解这个镜像服务的端口,以方便配置映射
#   2.在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口
EXPOSE 8080

# 设置启动命令
# 只设置 CMD 是常见的用法,如: CMD ["catalina.sh", "run"] 
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]

第二步:使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)

docker build -t  sentinel:8 ./  #不要丢掉这里的点

第三步:后台运行sentinel容器

docker run -d --name sentinel8181 -p 8181:8080 sentinel:8   #-p用于指定端口映射

第四步:查看sentinel容器

docker ps -a
docker logs sentinel8181
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值