学习条记--Docker
https://img-blog.csdnimg.cn/img_convert/fabc2618b643a776f948d631b421e5a2.png安装
1.卸载旧版
首先如果体系中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine 2.设置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils 安装成功后,执行命令,设置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3.安装Docker
末了,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 4.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps 5.设置镜像加快
这里以阿里云镜像加快为例。
5.1.注册阿里云账号
首先访问阿里云网站:
阿里云-盘算,为了无法盘算的价值
注册一个账号。
5.2.开通镜像服务
在首页的产物中,找到阿里云的容器镜像服务:
https://img-blog.csdnimg.cn/img_convert/6799ea16b49e0cd857d15ea2a407329f.png
点击后进入控制台:
https://img-blog.csdnimg.cn/img_convert/fc5d368b7173a6366a243ed9e57da1b0.png
首次大概需要选择立即开通,然后进入控制台。
5.3.设置镜像加快
找到镜像工具下的镜像加快器:
https://img-blog.csdnimg.cn/img_convert/1b2319ff87f3f442656d60fe7a6e5bda.png
页面向下滚动,即可找到设置的文档说明:
https://img-blog.csdnimg.cn/img_convert/ebc70ea0c1f26e17f594b356022ca4e5.png
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker 快速入门
部署Mysql
而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):
docker run -d \
--name mysq3 \
-p 3308:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql docker run -d \
--name mysql2 \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://p2kc3337.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
https://img-blog.csdnimg.cn/img_convert/fdcd0e11cf4c86541c4b65e73b61a3ab.png
Docker的镜像仓库:Dockers Hub
https://img-blog.csdnimg.cn/img_convert/7213871e7abc8304a143265f669a181d.png
命令解读
https://img-blog.csdnimg.cn/img_convert/f4a76df705541d1161e22efe158cde77.png
https://img-blog.csdnimg.cn/img_convert/8df6f4f715ac1631d59c21ecdf558aea.png
小结
https://img-blog.csdnimg.cn/img_convert/84fa332851b6ef395c46196d20886ef9.png
docker基础
常见命令
官网查阅:https://docs.docker.com/
https://img-blog.csdnimg.cn/img_convert/1fc68810f363b096302d639899883aca.png
补充:
默认情况下,每次重启假造机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:
# Docker开机自启
systemctl enable docker
# Docker容器开机自启
docker update --restart=always [容器名/容器id] 案例
https://img-blog.csdnimg.cn/img_convert/06fdc4810603b2dd1a48ba11150a7f82.png
# 第1步,去DockerHub查看nginx镜像仓库及相关信息
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx
# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第6步,访问网页,地址:http://虚拟机地址
# 第7步,停止容器
docker stop nginx
# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第9步,再次启动nginx容器
docker start nginx
# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第11步,查看容器详细信息
docker inspect nginx
# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p
# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx 命令别名
[*]修改/root/.bashrc文件
vi /root/.bashrc
[*]添加别名
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
[*]退出执行命令使别名见效
source /root/.bashrc
数据卷
https://img-blog.csdnimg.cn/img_convert/eef8df30767a8533025393ded25ed795.png
数据卷(volume)是一个假造目次,是容器内目次与宿主机目次之间映射的桥梁。
https://img-blog.csdnimg.cn/img_convert/3d31300785e9a7848556e6eda1b26f9f.png
/var/lib/docker/volumes这个目次就是默认的存放所有容器数据卷的目次,其下再根据数据卷名称创建新目次,格式为/数据卷名/_data。
命令
https://img-blog.csdnimg.cn/img_convert/6e65665f973817761adee80f1db0af5b.png
https://img-blog.csdnimg.cn/img_convert/d904642e9280c059ccbe130be351640a.png
完成案例-1
[*]删除原有的nginx容器
docker rm -f nginx
[*]创建数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
[*]然后查看数据卷
docker volume ls
[*]查看数据卷详情
docker volume inspect html
[*]查看/var/lib/docker/volumes/html/_data目次
ll /var/lib/docker/volumes/html/_data
[*]进入该目次,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
[*]进入容器内部,查看/usr/share/nginx/html目次内的文件是否变革
docker exec -it nginx bash
https://img-blog.csdnimg.cn/img_convert/3f585ca59549ead8bde44e0535f6db24.png
https://img-blog.csdnimg.cn/img_convert/af3324f654c212fdd4d322ad9b0345be.png
小结
https://img-blog.csdnimg.cn/img_convert/21452e96535c0dce8ef4b070538adc3e.png
完成案例-2本地目次挂载
https://img-blog.csdnimg.cn/img_convert/002cb73b6269f334f65514a9531207dc.png
# 1.查看MySQL容器详细信息
docker inspect mysql
# 关注其中.Config.Volumes部分和.Mounts部分
https://img-blog.csdnimg.cn/img_convert/09d94f3eb24fae73849b337b8d3d774c.png
# 1.删除原来的MySQL容器
docker rm -f mysql
# 2.进入root目录
cd ~
# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql0 \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
# 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
ls -l mysql
# 结果:
总用量 4
drwxr-xr-x. 2 root root 20 5月19 15:11 conf
drwxr-xr-x. 7 polkitd root 4096 5月19 15:11 data
drwxr-xr-x. 2 root root 23 5月19 15:11 init
# 查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
ls -l data
# 5.查看MySQL容器内数据
# 5.1.进入MySQL
docker exec -it mysql mysql -uroot -p123
# 5.2.查看编码表
show variables like "%char%";
# 5.3.结果,发现编码是utf8mb4没有问题
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
# 6.查看数据
# 6.1.查看数据库
show databases;
# 结果,hmall是黑马商城数据库
+--------------------+
| Database |
+--------------------+
| hmall |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
# 6.2.切换到hmall数据库
use hmall;
# 6.3.查看表
show tables;
# 结果:
+-----------------+
| Tables_in_hmall |
+-----------------+
| address |
| cart |
| item |
| order |
| order_detail |
| order_logistics |
| pay_order |
| user |
+-----------------+
# 6.4.查看address表数据
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| id | user_id | province | city | town | mobile | street | contact | is_default | notes |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| 59 | 1 | 北京 | 北京 | 朝阳区 | 13900112222 | 金燕龙办公楼 | 李佳诚 | 0 | NULL|
| 60 | 1 | 北京 | 北京 | 朝阳区 | 13700221122 | 修正大厦 | 李佳红 | 0 | NULL|
| 61 | 1 | 上海 | 上海 | 浦东新区| 13301212233 | 航头镇航头路 | 李佳星 | 1 | NULL|
| 63 | 1 | 广东 | 佛山 | 永春 | 13301212233 | 永春武馆 | 李晓龙 | 0 | NULL|
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
4 rows in set (0.00 sec)
自界说镜像
包装自己的java程序
https://img-blog.csdnimg.cn/img_convert/31861956b8fdb305c8fff43b9c9c3972.png
镜像就是包含了应用程序、程序运行的体系函数库、运行设置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
https://img-blog.csdnimg.cn/img_convert/804bd1f0a2e46918a8d0650219af9726.png
Dockerfile
Dockerfile就是一个文本文件个个的指令(lnstruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像;
https://img-blog.csdnimg.cn/img_convert/7c37d4098f1a5769b91cbf5a11dcce6e.png
官网文档:https://docs.docker.com/engine/reference/builder
https://img-blog.csdnimg.cn/img_convert/a020f861ff0d13b4a737d21ca0ba83a3.png
构建镜像运行java程序
[*]基础镜像
需要下载,可以使用课程提供的基础镜像
https://img-blog.csdnimg.cn/img_convert/fad7e1ffbaf670be214be656778308bb.png
docker load -i jdk.tar
https://img-blog.csdnimg.cn/img_convert/c2b80de71939064fee5b44e6155e96ac.png
[*]添加一个redis容器
docker pull redis
https://img-blog.csdnimg.cn/img_convert/5ab72287e7fcaf4ee0c7271afeb42c50.png
[*]我们将课前资料提供的docker-demo.jar包以及Dockerfile拷贝到假造机的/root/demo目次
https://img-blog.csdnimg.cn/img_convert/b1653ef670516106ec22a8603728c727.png
[*]执行命令,构建镜像
# 进入镜像目录
cd /root/demo
# 开始构建
docker build -t docker-demo . 命令说明:
[*]docker build : 就是构建一个docker镜像
[*]-t docker-demo :-t参数是指定镜像的名称(repository和tag)
[*]. : 末了的点是指构建时Dockerfile地点路径,由于我们进入了demo目次,所以指定的是.代表当前目次,也可以直接指定Dockerfile目次:
# 直接指定Dockerfile目次
docker build -t docker-demo:1.0 /root/demo
https://img-blog.csdnimg.cn/img_convert/454ea1e2421c20ee3df3c0ee2e97cb87.png
[*]尝试运行该镜像
docker run -d --name dd -p 8080:8080 docker-demo
dd:是自界说运行镜像名字
https://img-blog.csdnimg.cn/img_convert/afef5d87c0f1c8c898750afe533dc2e0.png
[*]查看日记
docker logs dd
https://img-blog.csdnimg.cn/img_convert/645afeaddbb385a319f648601cab4732.png
[*]网址输入192.168.5.11:8080/hello/count
https://img-blog.csdnimg.cn/img_convert/dd61f57a49246301c41874c6b30f314d.png
小结
https://img-blog.csdnimg.cn/img_convert/70aff078296c7a9a548361a96ac07697.png
网络
https://img-blog.csdnimg.cn/img_convert/1297465558cda55834410225a0d22fc0.png
自界说创建网络
https://img-blog.csdnimg.cn/img_convert/79c64ec6bbb6ef9361a964b21a17cd93.png
举例:
//查看网络
docker network ls
//创建一个网络
docker network create 自定义的网络名字
//查看本机的所有网段
ip addr
//容器加入网络
docker nerwork connect 网络名 容器名
//查看容器详细信息,可查看容器的网络网段信息
docker inspect 容器名
//再容器创建的时候加入网络,这样就不会创建默认网桥,只会存在你创建的网桥
docker run -d --name 容器名 -p 8080:8080 --network 网络名 docker-demo
项目部署
后端部署
第一步:将java项目打jar包;
https://img-blog.csdnimg.cn/img_convert/4de42d11b23241d2bea7fcbbe53b5239.png
第二步:将jar包和Dockerfile传给假造机
https://img-blog.csdnimg.cn/img_convert/975540ab777fe45675fe40734a60def5.png
第三步:构建镜像
docker build -t hmall .
PS:镜像构建中是怎样找到dockerfile文件的:如docker build -t hmall .
在Docker中,当你运行docker build命令来构建镜像时,Docker会查找当前上下文(context)中的Dockerfile文件。这个上下文通常是你运行docker build命令地点的目次,除非你用-f或--file选项指定了另一个位置。
在你给出的命令docker build -t hmall .中:
[*]-t hmall:这个参数用于给构建的镜像命名并打标签。在这个例子中,构建的镜像将被命名为hmall。
[*].(点):这个参数表现Docker构建的上下文是当前目次。Docker会打包当前目次(以及其子目次)中的所有内容,并将其发送到Docker保卫历程(daemon)以进行构建。但是,实际上只有Dockerfile和构建过程中引用的文件会被添加到镜像中。
Docker会在指定的上下文(在这个例子中是当前目次)中查找名为Dockerfile(没有扩展名)的文件。如果找不到该文件,Docker会返回一个错误。
如果你想要指定一个不同位置或名称的Dockerfile,你可以使用-f或--file选项。比方:
docker build -t hmall -f /path/to/Dockerfile .
在这个例子中,Docker会在/path/to/目次中查找名为Dockerfile的文件,并使用该文件来构建镜像。同时,.仍旧指定了构建上下文为当前目次,但是只有Dockerfile和构建过程中明确引用的文件会被发送到Docker保卫历程。
https://img-blog.csdnimg.cn/img_convert/d54d11c660c1542afbf331c67b2b60a1.png
第四步:看8080端口是否占用,可是删除原有的8080端口
https://img-blog.csdnimg.cn/img_convert/0c22fabcd3ef9b765770a31707859621.png
第五步:创建容器
docker run -d --name hm(自界说容器名字) -p 8080:8080 --network kussm(自界说网络名字) hmall
PS:docker中镜像与容器的关系
Docker中的镜像与容器之间存在着密切的关系,以下是它们之间关系的详细解释:
[*]界说与功能:
[*]
[*]Docker镜像:Docker镜像是Docker容器的构建块,它是一个只读的模板,包含了运行应用程序所需的文件体系、代码和依赖项。镜像可以看作是一个软件包,其中包含了构成应用程序的所有组件。
[*]Docker容器:Docker容器是Docker镜像的运行实例,它是一个独立的、可执行的历程,具有自己的文件体系、网络和历程空间。容器是可启动、停止、暂停和删除的,它们提供了一个隔离的运行情况,使得应用程序可以在其中运行,而不受主机情况的影响。
[*]关系描述:
[*]
[*]镜像与容器的关系:Docker镜像和容器之间是一种“类与实例”的关系。镜像可以看作是一个类,而容器则是这个类的实例。在Docker中,用户可以通过Docker镜像来创建Docker容器。
[*]依赖关系:每个Docker容器都基于一个特定的镜像。镜像提供了容器运行所需的文件体系和依赖项,而容器则在镜像的基础上启动、运行应用程序。
[*]特点:
[*]
[*]镜像的特点:
[*]
[*]
[*]只读性:镜像是只读的,意味着它不可修改。每次对镜像的修改都会生成一个新的镜像。
[*]完备性:镜像包含了一个完备的文件体系,其中包含了应用程序运行所需的所有文件、目次和设置。
[*]依赖项:镜像还包含了应用程序的运行时依赖项,比方库文件、依赖软件和情况变量等。
[*]
[*]容器的特点:
[*]
[*]
[*]独立性:每个容器都是一个独立的、可重复的、可部署的单元。
[*]可移植性:容器可以在不同的情况中进行共享、复制和传递。
[*]隔离性:容器提供了隔离的运行情况,使得应用程序可以在其中运行,而不受主机情况的影响。
[*]构建与运行:
[*]
[*]镜像的构建:Docker镜像的构建是通过一个叫做Dockerfile的文本文件进行的。Dockerfile中包含了一系列的指令,用于界说和描述怎样构建镜像。
[*]容器的运行:一旦镜像构建完成,可以通过Docker命令将其部署为容器。容器是镜像的运行实例,可以独立运行,并提供一个隔离的运行情况。
综上所述,Docker镜像与容器之间是一种“类与实例”的关系,镜像是用来创建容器的模板,而容器则是镜像的运行实例。它们共同构成了Docker容器化的情况,使得开发职员可以或许更轻松地构建、交付和运行应用程序。
第六步:查看日记,浏览器访问检查
docker logs -f hm
https://img-blog.csdnimg.cn/img_convert/7015170a56be57d5e1dcd8af9ec7f467.png
https://img-blog.csdnimg.cn/img_convert/7479d24514b03350c8f1fde38805e092.png
前端部署
https://img-blog.csdnimg.cn/img_convert/bafee1bea90ddf522d41b1d7f4ff1733.png
第一步:将前端文件传入假造机中
https://img-blog.csdnimg.cn/img_convert/dea2127c50212d184eec9f8dba64a141.png
第二步:查看官网文档,查询设置挂载路径
https://img-blog.csdnimg.cn/img_convert/0977630cc2cf5679f9392acec957420e.png
设置挂载路径
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network kussm \
nginx
https://img-blog.csdnimg.cn/img_convert/054ffde3adce787c666a87585d731f38.png
https://img-blog.csdnimg.cn/img_convert/cbefda98189b363f3429a03113343652.png
第三步:浏览器访问18080端口
https://img-blog.csdnimg.cn/img_convert/2d2ff5925dcb023779218e99d07aee66.png
DockerCompose
DockerCompose通过一个单独的docker-compose.yml模板文件(YAML格式)来界说一组相关联的应用容器,资助我们实现多个相互关联的Docker容器的快速部署。
https://img-blog.csdnimg.cn/img_convert/1a445ba59ddaf47eb2b5708ccec477b9.png
对比
https://img-blog.csdnimg.cn/img_convert/2148108d78436c00f3ecc65344771e50.png
命令
https://img-blog.csdnimg.cn/img_convert/4d673c829f91fc5962959faf487805d8.png
开始部署使用
之前因为有相同的容易,所以先将之前的容器和镜像删除
https://img-blog.csdnimg.cn/img_convert/f16ce826b0f315afb8fd742dee9ccc13.png
https://img-blog.csdnimg.cn/img_convert/ffa3ba7b07e81a2e4a2554af085d348e.png
第一步:先准备好compose.yml文件,设置好信息,传递进假造机
https://img-blog.csdnimg.cn/img_convert/df53ddfcbf033939eee36b75e2b86940.png
https://img-blog.csdnimg.cn/img_convert/c2a49358d2e8719bf3cdd6b8948d5734.png
第二步:运行compose
docker compose up -d //-d表现后台运行
https://img-blog.csdnimg.cn/img_convert/f7d6f14aabf06252960348343bbd7a9c.png
第三步:浏览器检查
https://img-blog.csdnimg.cn/img_convert/c3a2f1ad82127b2f9ee54376f519f0e3.png
第四步:移除
https://img-blog.csdnimg.cn/img_convert/e0798ae96345b2c4fce00a40af40848f.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]