stage5 day12 ----- Docker

问题

  1. docker 的作用是什么? 为什么要用docker?

  2. Docker 的核心概念是什么?

  3. 导入和导出镜像命令?

  4. 怎么清理所有容器? docker rm -f $(docker ps -aq)

  5. 重启docker服务: systemctl restart docker

  6. 查看构建过程:docker history tomcat

  7. 对默认 命令的覆盖

  8. 进入容器,运行指定命令:docker exec -it 容器id bash
    exec:execute
    i : 与容器交互
    t : 启动终端
    bash: 启动命令行 相当于cmd
    \:字符连接

  9. docker启动时,怎么使容器一起启动?

  10. 怎么可以在容器停止时自动删除容器 ?

  11. 为什么端口映射?手动映射,自动映射?

  12. 构建镜像流程?

Docker

docker : 一种容器化技术~快速发布,部署,隔离
“一次封装,到处运行”,因为docker解决了应用环境的问题,安装了docker的平台就能跑“docker包”,这样就决绝了“开发环境能跑,一上线就崩”的尴尬。

在这里插入图片描述

在这里插入图片描述

安装

在这里插入图片描述

# 进入文件夹
cd /root/setup/docker

# 为 install.sh添加执行权限
chmod +x install.sh

# 安装
./install.sh -f docker-20.10.6.tgz

在这里插入图片描述

关闭防火墙

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

1 镜像

学习链接:镜像
docker 轻量级的虚拟机

  1. 克隆docker-base -->docker
  2. 设置ip
./ip-static
ip:192.168.64.150

ifconfig
  1. 上传文件到 /root
    在这里插入图片描述
  2. 导入镜像
docker load -i docker-images.gz

在这里插入图片描述

重启docker服务:

systemctl restart docker

在这里插入图片描述
在这里插入图片描述

5. 导出和导入镜像
导出镜像

# 把两个镜像 redis:latest 和 centos:8 导出,并压缩到 imgs.gz
docker save redis centos:8 | gzip > imgs.gz

导入镜像

docker load -i imgs.gz

2 从镜像运行容器

学习链接:从镜像运行容器

2.1 从镜像运行容器

从 tomcat 镜像启动容器:

docker run tomcat

容器启动后在容器中运行了 tomcat 应用。

这样启动会占用命令行,可以用 ctrl+c 退出 tomcat 应用。当容器中没有任何应用运行时,容器也会自动关闭退出。

查看容器:

docker ps -a

在这里插入图片描述

2.2 容器启动后运行的命令

容器启动后需要运行指定的命令来启动一个应用。

在镜像中指定的默认运行命令

docker history tomcat #查看构建过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 ENTRYPOINTCMD & 启动时对默认命令的覆盖 ENTRYPOINTCMD

#设置默认启动命令
#1.CMD
CMD ["java", "jar", "/e.jar", "--server.port=2001"]
#2. 设置参数
ENTRYPOINT ["java"]
CMD ["jar", "/e.jar", "--server.port=2001"]

#覆盖默认命令
docker run eureka java -jar /e2.jar  #会把cmd设置的命令覆盖

docker run --entrypoint java eureka -jar /e2.jar  #覆盖entrypoint方式设置的命令

在这里插入图片描述
在这里插入图片描述

-d 后台运行

在这里插入图片描述

logs _ _ _ 查看日志

在这里插入图片描述

只显示容器id

在这里插入图片描述
在这里插入图片描述

2.4 docker exec 进入容器,运行指定命令

i : 与容器交互
t : 启动终端
bash: 启动命令行 相当于cmd
\:字符连接
ls:
在这里插入图片描述

2.5 --name--restart=always 与系统一起启动

--name:
每个启动的容器都可以指定一个名称,方便使用名称来操作容器。

--restart=always:
docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。

docker run -d --name cat1 tomcat

docker run -d --name cat2 \
--restart=always \
tomcat

cat1 不随系统重启
在这里插入图片描述
在这里插入图片描述

2.6 --rmdocker cp

--rm:
有时候我们会临时使用一个容器之后这个容器就不再使用,添加 --rm 参数可以在容器停止时自动删除容器

docker cp:
在容器和宿主机之间复制文件

下面来看一个实际的例子,这个例子中我们从 tomcat 的一个临时容器复制配置文件 server.xml 到宿主机,然后在 server.xml 中修改端口号,把 8080 改成 80。

docker run -d --name tmp
–rm
tomcat
docker cp tmp:/usr/local/tomcat/conf/server.xml
~/server.xml

docker stop tmp

# 启动一个临时容器
docker run -d \
--rm \
--name tmp \
tomcat

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

# 停止临时容器,会自动删除
docker stop tmp

docker ps -a

# 修改 server.xml 中的8080端口,改成80
vim server.xml

# -v 把宿主机路径挂载到容器的一个路径
# 挂载的路径可以是文件,也可以是文件夹
# 这里把修改过的 server.xml 挂载到新启动的容器中
docker run -d \
--name cat2 \
-v /root/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat

# 查看启动日志,确认使用 80 端口启动
docker logs cat2

在这里插入图片描述

docker run -d --name cat3 \
-v /root/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat

在这里插入图片描述

3 文件挂载

学习链接:文件挂载

一、-v 目录挂载

docker ps -aq
docker rm -f ${docker ps -aq}

docker run -d --name cat1
-v /usr/app:/opt/app
tomcat

docker exec -it cat1 touch /opt/app/f1.txt
ls /usr/app

二、数据卷挂载

上面例子中用到 -v 参数,他可以将宿主机的路径挂载到容器指定路径,通过 -v 参数可以挂载文件、目录和数据卷。
挂载目录:
在这里插入图片描述

# 新建数据卷
docker volume create my-vol

# 查看 my-vol 数据卷的信息
docker volume ls

# /var/lib/docker/volumes/my-vol/_data
docker inspect my-vol

# 挂载 my-vol 数据卷到容器的 /opt/app 路径
docker run -d \
--name cat2 \
-v my-vol:/opt/app \
tomcat

# 在容器的 /opt/app 下新建 f2.txt
docker exec -it cat2 bash

touch /opt/app/f2.txt

# 退出容器的命令行
exit

# 进入 my-vol 数据卷的真实目录,查看 f2.txt
cd /var/lib/docker/volumes/my-vol/_data

ls

# 新建数据卷
docker volume create my-vol

# 查看 my-vol 数据卷的信息
docker volume ls

# /var/lib/docker/volumes/my-vol/_data
docker inspect my-vol

在这里插入图片描述

# 挂载 my-vol 数据卷到容器的 /opt/app 路径
docker run -d --name cat2 \
-v my-vol:/opt/app \
-v ~/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat

docker inspect cat2

docker exec -it cat2 touch /opt/app/f2.txt

# 查看 my-vol 数据卷的真实目录,查看 f2.txt
ls /var/lib/docker/volumes/my-vol/_data

在这里插入图片描述

4 网络

学习链接:Docker(五)-网络

端口映射

客户端访问时不能跨过宿主机直接访问容器,宿主机需要映射(宿主机使用什么端口,向容器的哪一个端口转发 -p
把客户端的请求转发到容器

-p参数:
通过 -p 参数设置,可以在宿主机上选择一个端口映射到容器的端口。

在这里插入图片描述

docker run -d --name cat1 \
-p 80:8080 \   #宿主机端口映射到容器端口
tomcat

浏览器访问: http://192.168.64.150
在这里插入图片描述
P (大写)
自动端口映射
根据镜像中设置暴露的端口来自动映射到宿主机形同端口

docker run -d --name cat2
-P
tomcat \

在这里插入图片描述

在这里插入图片描述
docker run -d --name cat3
-v ~/server.xml:/usr/local/tomcat/conf/server.xml
-P tomcat

在这里插入图片描述
--net host
容器直接使用宿主机的网络和端口

docker run -d --name cat1 \
--net host \
tomcat

http://192.168.64.150:8080/

虚拟网络

1 新建虚拟网络

# 新建虚拟网络 my-net
docker network create my-net

# 查看虚拟网络
docker network ls

# 查看网络描述信息
docker inspect my-net

# 查看宿主机新建的虚拟网卡
ifconfig

# 清理容器
docker rm -f $(docker ps -aq)


在这里插入图片描述

2 新建两个容器

# 新建两个容器 cat1 和 cat2
# 连接到虚拟网络 my-net
docker run -d --name cat1 \
--net my-net \	#连接到虚拟网络
tomcat

docker run -d --name cat2 \
--net my-net \
tomcat

# 查看两个容器的虚拟网络ip
docker inspect cat1
docker inspect cat2

查看详情docker inspect cat1
在这里插入图片描述
在这里插入图片描述

3 测试

# 测试网络能否互联互通
# 从宿主机ping两个容器
ping 172.18.0.2
ping 172.18.0.3

# 进入cat1,ping宿主机和cat2
docker exec -it cat1 ping 172.18.0.1
docker exec -it cat1 ping 172.18.0.3
# 从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境
docker exec -it cat1 ping cat2

在这里插入图片描述

5 构建镜像

学习连接:构建镜像
docker:https://hub.docker.com/

流程

装机流程 Dockerfile Dockerfile 类似于一个批处理文件,用来设置镜像的构建流程
安装配置 Tomcat

  1. 基础系统
    FROM centos:8

  2. 添加文件
    jdk
    tomcat
    ADD jdk.gz tomcat.gz /usr/local/

  3. 配置环境变量
    JAVA_HOME
    CATALINA_HOME
    PATH
    ENV JAVA_HOME=...... CATALINA_HOME=...... PATH=....... (可以折行 \)

  4. WORKDIR 容器启动后默认切换的目录
    WORKDIR /usr/local/tomcat

  5. EXPOSE 8080 可选 (暴露端口,只影响自动映射)

  6. CMD 默认启动命令 (启动容器后在容器中默认的命令)
    CMD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

执行构建

进入 tomcat 文件夹,并在当前文件夹下找到 Dockerfile 和其他需要的文件,来构建镜像:

在这里插入图片描述

在这里插入图片描述
查看构建过程
在这里插入图片描述

启动容器

docker run -d --name cat1 -p 8080:8080 tomcat:10

docker ps -a

docker logs cat1

在这里插入图片描述

注意:尽量减少镜像层的创建,因为每一层都要启动一个新容器

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值