ToB企服应用市场:ToB评测及商务社交产业平台

标题: 学习条记--Docker [打印本页]

作者: 北冰洋以北    时间: 2024-9-4 19:44
标题: 学习条记--Docker

安装

1.卸载旧版

首先如果体系中已经存在旧的Docker,则先卸载:
  1. yum remove docker \
  2.     docker-client \
  3.     docker-client-latest \
  4.     docker-common \
  5.     docker-latest \
  6.     docker-latest-logrotate \
  7.     docker-logrotate \
  8.     docker-engine
复制代码
2.设置Docker的yum库

首先要安装一个yum工具
  1. yum install -y yum-utils
复制代码
安装成功后,执行命令,设置Docker的yum源:
  1. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制代码
3.安装Docker

末了,执行命令,安装Docker
  1. yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
复制代码
4.启动和校验

  1. # 启动Docker
  2. systemctl start docker
  3. # 停止Docker
  4. systemctl stop docker
  5. # 重启
  6. systemctl restart docker
  7. # 设置开机自启
  8. systemctl enable docker
  9. # 执行docker ps命令,如果不报错,说明安装启动成功
  10. docker ps
复制代码
5.设置镜像加快

这里以阿里云镜像加快为例。
5.1.注册阿里云账号

首先访问阿里云网站:
阿里云-盘算,为了无法盘算的价值
注册一个账号。
5.2.开通镜像服务

在首页的产物中,找到阿里云的容器镜像服务


点击后进入控制台:


首次大概需要选择立即开通,然后进入控制台。
5.3.设置镜像加快

找到镜像工具下的镜像加快器


页面向下滚动,即可找到设置的文档说明:


具体命令如下:
  1. # 创建目录
  2. mkdir -p /etc/docker
  3. # 复制内容,注意把其中的镜像加速地址改成你自己的
  4. tee /etc/docker/daemon.json <<-'EOF'
  5. {
  6.   "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
  7. }
  8. EOF
  9. # 重新加载配置
  10. systemctl daemon-reload
  11. # 重启Docker
  12. systemctl restart docker
复制代码
快速入门

部署Mysql

而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):
  1. docker run -d \
  2.   --name mysq3 \
  3.   -p 3308:3306 \
  4.   -e TZ=Asia/Shanghai \
  5.   -e MYSQL_ROOT_PASSWORD=123 \
  6.   mysql
复制代码
  1. docker run -d \
  2.   --name mysql2 \
  3.   -p 3307:3306 \
  4.   -e TZ=Asia/Shanghai \
  5.   -e MYSQL_ROOT_PASSWORD=123 \
  6.   mysql
  7.   tee /etc/docker/daemon.json <<-'EOF'
  8. {
  9.   "registry-mirrors": ["https://p2kc3337.mirror.aliyuncs.com"]
  10. }
  11. EOF
  12. # 重新加载配置
  13. systemctl daemon-reload
  14. # 重启Docker
  15. systemctl restart docker
复制代码



Docker的镜像仓库:Dockers Hub





命令解读






小结



docker基础

常见命令

官网查阅:https://docs.docker.com/



补充:
默认情况下,每次重启假造机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:
  1. # Docker开机自启
  2. systemctl enable docker
  3. # Docker容器开机自启
  4. docker update --restart=always [容器名/容器id]
复制代码
案例




  1. # 第1步,去DockerHub查看nginx镜像仓库及相关信息
  2. # 第2步,拉取Nginx镜像
  3. docker pull nginx
  4. # 第3步,查看镜像
  5. docker images
  6. # 结果如下:
  7. REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
  8. nginx        latest    605c77e624dd   16 months ago   141MB
  9. mysql        latest    3218b38490ce   17 months ago   516MB
  10. # 第4步,创建并允许Nginx容器
  11. docker run -d --name nginx -p 80:80 nginx
  12. # 第5步,查看运行中容器
  13. docker ps
  14. # 也可以加格式化方式访问,格式会更加清爽
  15. docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
  16. # 第6步,访问网页,地址:http://虚拟机地址
  17. # 第7步,停止容器
  18. docker stop nginx
  19. # 第8步,查看所有容器
  20. docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
  21. # 第9步,再次启动nginx容器
  22. docker start nginx
  23. # 第10步,再次查看容器
  24. docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
  25. # 第11步,查看容器详细信息
  26. docker inspect nginx
  27. # 第12步,进入容器,查看容器内目录
  28. docker exec -it nginx bash
  29. # 或者,可以进入MySQL
  30. docker exec -it mysql mysql -uroot -p
  31. # 第13步,删除容器
  32. docker rm nginx
  33. # 发现无法删除,因为容器运行中,强制删除容器
  34. docker rm -f nginx
复制代码
命令别名

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
数据卷





数据卷(volume)是一个假造目次,是容器内目次与宿主机目次之间映射的桥梁。


/var/lib/docker/volumes这个目次就是默认的存放所有容器数据卷的目次,其下再根据数据卷名称创建新目次,格式为/数据卷名/_data。
命令






完成案例-1

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
ll /var/lib/docker/volumes/html/_data
cd /var/lib/docker/volumes/html/_data
vi index.html
docker exec -it nginx bash





小结



完成案例-2本地目次挂载



  1. # 1.查看MySQL容器详细信息
  2. docker inspect mysql
  3. # 关注其中.Config.Volumes部分和.Mounts部分
复制代码


  1. # 1.删除原来的MySQL容器
  2. docker rm -f mysql
  3. # 2.进入root目录
  4. cd ~
  5. # 3.创建并运行新mysql容器,挂载本地目录
  6. docker run -d \
  7.   --name mysql0 \
  8.   -p 3307:3306 \
  9.   -e TZ=Asia/Shanghai \
  10.   -e MYSQL_ROOT_PASSWORD=123 \
  11.   -v /root/mysql/data:/var/lib/mysql \
  12.   -v /root/mysql/conf:/etc/mysql/conf.d \
  13.   -v /root/mysql/init:/docker-entrypoint-initdb.d \
  14.   mysql
  15. # 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
  16. ls -l mysql
  17. # 结果:
  18. 总用量 4
  19. drwxr-xr-x. 2 root    root   20 5月  19 15:11 conf
  20. drwxr-xr-x. 7 polkitd root 4096 5月  19 15:11 data
  21. drwxr-xr-x. 2 root    root   23 5月  19 15:11 init
  22. # 查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
  23. ls -l data
  24. # 5.查看MySQL容器内数据
  25. # 5.1.进入MySQL
  26. docker exec -it mysql mysql -uroot -p123
  27. # 5.2.查看编码表
  28. show variables like "%char%";
  29. # 5.3.结果,发现编码是utf8mb4没有问题
  30. +--------------------------+--------------------------------+
  31. | Variable_name            | Value                          |
  32. +--------------------------+--------------------------------+
  33. | character_set_client     | utf8mb4                        |
  34. | character_set_connection | utf8mb4                        |
  35. | character_set_database   | utf8mb4                        |
  36. | character_set_filesystem | binary                         |
  37. | character_set_results    | utf8mb4                        |
  38. | character_set_server     | utf8mb4                        |
  39. | character_set_system     | utf8mb3                        |
  40. | character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
  41. +--------------------------+--------------------------------+
  42. # 6.查看数据
  43. # 6.1.查看数据库
  44. show databases;
  45. # 结果,hmall是黑马商城数据库
  46. +--------------------+
  47. | Database           |
  48. +--------------------+
  49. | hmall              |
  50. | information_schema |
  51. | mysql              |
  52. | performance_schema |
  53. | sys                |
  54. +--------------------+
  55. 5 rows in set (0.00 sec)
  56. # 6.2.切换到hmall数据库
  57. use hmall;
  58. # 6.3.查看表
  59. show tables;
  60. # 结果:
  61. +-----------------+
  62. | Tables_in_hmall |
  63. +-----------------+
  64. | address         |
  65. | cart            |
  66. | item            |
  67. | order           |
  68. | order_detail    |
  69. | order_logistics |
  70. | pay_order       |
  71. | user            |
  72. +-----------------+
  73. # 6.4.查看address表数据
  74. +----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
  75. | id | user_id | province | city   | town     | mobile      | street        | contact   | is_default | notes |
  76. +----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
  77. | 59 |       1 | 北京     | 北京   | 朝阳区    | 13900112222 | 金燕龙办公楼   | 李佳诚    | 0          | NULL  |
  78. | 60 |       1 | 北京     | 北京   | 朝阳区    | 13700221122 | 修正大厦       | 李佳红    | 0          | NULL  |
  79. | 61 |       1 | 上海     | 上海   | 浦东新区  | 13301212233 | 航头镇航头路   | 李佳星    | 1          | NULL  |
  80. | 63 |       1 | 广东     | 佛山   | 永春      | 13301212233 | 永春武馆       | 李晓龙    | 0          | NULL  |
  81. +----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
  82. 4 rows in set (0.00 sec)
复制代码


自界说镜像

包装自己的java程序


镜像就是包含了应用程序、程序运行的体系函数库、运行设置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。




Dockerfile

Dockerfile就是一个文本文件个个的指令(lnstruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像;


官网文档:https://docs.docker.com/engine/reference/builder




构建镜像运行java程序

需要下载,可以使用课程提供的基础镜像


docker load -i jdk.tar


docker pull redis




  1. # 进入镜像目录
  2. cd /root/demo
  3. # 开始构建
  4. docker build -t docker-demo .
复制代码
命令说明:


# 直接指定Dockerfile目次
docker build -t docker-demo:1.0 /root/demo



docker run -d --name dd -p 8080:8080 docker-demo
dd:是自界说运行镜像名字



docker logs dd




小结



网络




自界说创建网络



举例:
  1. //查看网络
  2. docker network ls
  3. //创建一个网络
  4. docker network create 自定义的网络名字
  5. //查看本机的所有网段
  6. ip addr
  7. //容器加入网络
  8. docker nerwork connect 网络名 容器名
  9. //查看容器详细信息,可查看容器的网络网段信息
  10. docker inspect 容器名
  11. //再容器创建的时候加入网络,这样就不会创建默认网桥,只会存在你创建的网桥
  12. docker run -d --name 容器名 -p 8080:8080 --network 网络名 docker-demo
复制代码

项目部署

后端部署

第一步:将java项目打jar包;


第二步:将jar包和Dockerfile传给假造机


第三步:构建镜像
docker build -t hmall .
PS:镜像构建中是怎样找到dockerfile文件的:如docker build -t hmall .
在Docker中,当你运行docker build命令来构建镜像时,Docker会查找当前上下文(context)中的Dockerfile文件。这个上下文通常是你运行docker build命令地点的目次,除非你用-f或--file选项指定了另一个位置。
在你给出的命令docker build -t hmall .中:

Docker会在指定的上下文(在这个例子中是当前目次)中查找名为Dockerfile(没有扩展名)的文件。如果找不到该文件,Docker会返回一个错误。
如果你想要指定一个不同位置或名称的Dockerfile,你可以使用-f或--file选项。比方:

docker build -t hmall -f /path/to/Dockerfile .

在这个例子中,Docker会在/path/to/目次中查找名为Dockerfile的文件,并使用该文件来构建镜像。同时,.仍旧指定了构建上下文为当前目次,但是只有Dockerfile和构建过程中明确引用的文件会被发送到Docker保卫历程。


第四步:看8080端口是否占用,可是删除原有的8080端口


第五步:创建容器
docker run -d --name hm(自界说容器名字) -p 8080:8080 --network kussm(自界说网络名字) hmall
PS:docker中镜像与容器的关系
Docker中的镜像与容器之间存在着密切的关系,以下是它们之间关系的详细解释:







综上所述,Docker镜像与容器之间是一种“类与实例”的关系,镜像是用来创建容器的模板,而容器则是镜像的运行实例。它们共同构成了Docker容器化的情况,使得开发职员可以或许更轻松地构建、交付和运行应用程序。
第六步:查看日记,浏览器访问检查
docker logs -f hm




前端部署



第一步:将前端文件传入假造机中


第二步:查看官网文档,查询设置挂载路径


设置挂载路径
  1. docker run -d \
  2.   --name nginx \
  3.   -p 18080:18080 \
  4.   -p 18081:18081 \
  5.   -v /root/nginx/html:/usr/share/nginx/html \
  6.   -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  7.   --network kussm \
  8.   nginx
复制代码




第三步:浏览器访问18080端口


DockerCompose

DockerCompose通过一个单独的docker-compose.yml模板文件(YAML格式)来界说一组相关联的应用容器,资助我们实现多个相互关联的Docker容器的快速部署。


对比



命令




开始部署使用

之前因为有相同的容易,所以先将之前的容器和镜像删除




第一步:先准备好compose.yml文件,设置好信息,传递进假造机




第二步:运行compose
docker compose up -d //-d表现后台运行


第三步:浏览器检查


第四步:移除




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4