Docker学习2

191 阅读4分钟

Docker安装

1.利用VMware Workstation软件安装Ubuntu虚拟机

image.png

2. 卸载旧版本Docker

sudo apt-get remove docker docker-engine docker.io containerd runc

image.png

3.获取软件最新源

sudo apt-get update

image.png

4.安装apt依赖包

 sudo apt-get install \
      ca-certificates \
      curl \
      gnupg \
      lsb-release

image.png

5.安装证书

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

6.设置仓库

 echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

7.更新apt包索引

sudo apt-get update

image.png

8.安装Docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

image.png

9.测试Docker

sudo docker run hello-world

image.png

sudo docker -v

image.png

sudo docker images

image.png

10.配置Docker镜像加速器

image.png

sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF' 
{
"registry-mirrors": ["https://2tc4kxop.mirror.aliyuncs.com"] 
} 
EOF 
sudo systemctl daemon-reload 
sudo systemctl restart docker

image.png

编译打包springboot应用后通过docker在宿主机和外部机器访问容器

1.在本地测试springboot项目

image.png

image.png

2.将springboot项目打包

image.png

image.png

image.png

3.检测springboot项目能否独立运行

image.png

4.将springboot jar包传入虚拟机

设置共享文件夹

image.png

设置挂载

image.png

实现共享

image.png image.png

5.将springboot jar包传至宿主机的根目录

mv 文件名/目录名 位置 #移动目录或文件

image.png

6.创建docker-files目录,并把springboot jar包传进去

mkdir 目录名 #创建工作目录

image.png

7.定义dockerfile

安装vim编辑器

sudo apt-get install vim

image.png

用vim编辑器编辑dockerfile

vim 文件名 #编辑文件
  • 进入vim编辑器后按i进入输入模式,输入完按esc,再按:wq保存退出
  • FROM 定义父镜像
  • MAINTAINER 定义作者信息
  • ADD 添加文件
  • CMD 定义容器启动执行的命令
  • RUN 执行命令
  • WORKDIR 定义默认工作目录

image.png

image.png

8.根据dockerfile制作镜像

sudo docker build -f ./springboot_dockerfile -t shin . #-f 指定dockerfile文件路径 -t 指定新的镜像名称,版本
  • 注意不要忘记docker build语句最后的空格点,用于指定路径 image.png

9.启动容器的同时设置端口映射

sudo docker run -id -p 8888:8080 shin

-将宿主机的8888端口映射到容器的8080端口,这样外部机器就可以通过访问宿主机间接访问容器 image.png

10.访问

在外部机器通过访问"宿主机ip:8888"端口映射到"shin容器ip:8080"间接访问shin容器

image.png image.png

  • 即外部机器不能直接访问容器,只能通过访问宿主机,端口映射,间接访问容器。

在宿主机通过访问"shin容器ip:8080"访问shin容器

sudo docker inspect 容器Id

-通过查询容器信息,查询容器的IP地址 image.png image.png

使用docker compose编排springboot+nginx项目,然后在宿主机和外部机器访问容器

相关知识

Docker服务编排

  • 微服务架构的应用系统中一般包括若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动停止
  • 维护的工作量会很大
  • 要从Dockerfile build image 或者dockerhub拉取image
  • 要创建多个container
  • 要管理这些container(启动停止删除)
  • 服务编排即按照一定的业务规则批量管理容器

Docker Compose

  • Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动,停止。使用步骤
  • 利用Dockerfile运行环境镜像
  • 使用docker-compose.yml定义组成应用的各服务
  • 运行docker-compose up启动应用

image.png

1.安装Docker-compose

  • 根据官方文档安装docker时,同时安装了docker-compose。
docker compose version

image.png

2.部署nginx

拉取nginx映射

docker pull nginx:1.18

image.png

image.png

设置目录

image.png

  • 在/root目录下创建nginx目录用于存储nginx数据信息
  • 在~/nginx/conf/下创建nginx.conf文件,设置配置

设置配置

image.png

创建容器,设置端口映射、目录挂载

image.png

  • 参数说明:

    • -p 80:80:将宿主机的80端口映射到容器的80 端口。
    • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录
    • -v $PWD/logs:/var/log/nginx:将宿主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录

创建html文件,用于测试访问

image.png image.png

在外部机器访问

image.png

3.创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

4.编写 docker-compose.yml 文件

image.png image.png

  • yml文件通过缩进区分子父集
  • version:版本
  • services:要启动哪些容器
  • image:镜像
  • ports:端口映射
  • links:可以通过访问当前容器间接访问到另一个容器
  • volumes:目录挂载
  • expose:对外暴露的端口

5.设置nginx反向代理

创建./nginx/conf.d目录

image.png

进入./nginx/conf.d目录 编写nginx配置文件

image.png

image.png

  • listen:监听的端口
  • access_log off:关掉日志
  • proxy_pass:配置反向代理,当访问80端口时,就会访问到"shin容器ip:8080"

6.在~/docker-compose 目录下 使用docker-compose 启动容器

sudo docker-compose up

image.png

image.png

  • 依次创建了shin,nginx容器

7.访问

在外部机器通过访问"宿主机ip:80"端口映射到"nginx容器ip:80"端口映射到"shin容器ip:8080"间接访问shin容器

image.png

image.png

在宿主机通过访问"nginx容器ip:80"端口映射到"shin容器ip:8080"间接访问shin容器

sudo docker inspect 容器Id

-通过查询nginx容器信息,查询容器的IP地址

image.png

image.png

image.png