Docker实战

Docker

docker的安装

  1. 卸载旧版Docker
powershell 复制代码
 yum remove docker \
	    docker-client \
		docker-client-latest \
		docker-common \
		docker-latest \
		docker-latest logrotate \
		docker-engine 
  1. 配置docker的yum库
powershell 复制代码
yum install -y yum-utils

然后配置Docker的yum源

powershell 复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. Docker安装成功,然后通过命令检测是否安装成功
powershell 复制代码
    docker -v(查看docker版本)
    docker images
  1. 启动Docker
powershell 复制代码
systemctl start docker  
systemctl stop docker(停止docker)
systemctl restart docker(重启docker)
systemctl enable docker(开机自动启动docker)
  1. 然后在阿里容器镜像服务这边配置镜像加速(那边有教程)

docker的使用

docker部署mysql

命令:

powershell 复制代码
docker run -d \
          --name mysql \
		  -p 3306:3306 \
		  -e TZ=Asia/Shanghai \
		  -e MYSQL_ROOT_PASSWORD=123\
		  mysql

然后就可以使用sqlyog连接到这点虚拟机ip上的mysql了。

利用docker安装应用时,Docker会自动搜索并下镜像,镜像不仅包含应用本身,还包含了运行所需的环境、配置等等,Docker会在运行时创建一个隔离环境,成为容器。

所以,可以在docker上搭建集群(这里搭建mysql集群)

使用 docker ps 命令可以查看已经启动的服务有哪些

镜像仓库:存储和管理镜像的平台Docker官方维护了一个公共的仓库:Docker Hub

命令解读
  1. docker run,创建并运行一个容器, -d是让容器在后台运行。
    --name mysql,给容器起个名字,唯一。
    -p 3306:3306,设置端口映射,把宿主机的端口和容器的3306端口做一个映射,当我们访问外部机器的3306端口时,docker会把请求转为容器内的3306端口。(前面是宿主机端口,后面是容器端口)
    -e KEY=VALUE,设置环境变量
    mysql,指定运行"镜像名字"
  2. 镜像命名规范
    镜像名称一般由两部分组成,镜像名:版本,mysql:5.7
    如果没有指定版本,则是最新版本。

docker基础

常见命令
  1. docker pull nginx(拉取nginx镜像)

  2. docker images(查看本地镜像列表)

  3. docker save -o nginx.tar nginxs:latest(将本地的nginx镜像打包,:latest是版本,-o后面的名字是打包后的文件名)

  4. ll(查看目录,会多出nginx.tar包)

  5. docker rmi nginx(删除nginx镜像)

  6. docker load -i nginx.tar(-i后面跟本地文件名,加载nginx.tar镜像,然后跟docker images查看,nginx镜像就回来了)

  7. docker -run -d --name nginx -p 80:80 nginx (docker -run 创建并启动容器,-d代表后台运行,--name起名字,-p 80:80端口映射 -e是环境变量,没有就不用写,最后加上镜像名称,然后回车)

  8. docker -ps(查看容器状态,其中输出的关键字如下,

    CONTAINER ID容器ID,

    IMAGE容器所使用的镜像,

    COMMAD内部运行时的启动命令,

    CREATED创建时间,

    STATUS状态,

    up就是启动中,

    PORTS端口映射)

  9. docker stop nginx(停止nginx容器,然后再用docker -ps查看,会发现nginx没了,所以docker -ps是查看运行中的容器)

  10. docker ps -a(查看所有的容器)

  11. docker start nginx(再启动nginx容器)

  12. docker logs nginx(查看nginx的运行日志)

  13. docker logs -f nginx(持续查看nginx日志,ctrl+c停止)

  14. docker exec -it nginx bash(进入nginx容器,-it就是加上一个可执行命令的终端,bash是命令行交互方式)

  15. exit(退出)

  16. docker stop nginx(停止nginx容器)

  17. docker rm nginx(删除nginx容器)

  18. docker rm nginx -f(强制删除nginx(运行中的容器也可以删掉))

数据卷挂载
  1. 想要修改nginx容器内html目录下的index.html文件很困难,因为要进入到nginx的html目录下面,并进行vi操作,修改。但是会操作失败,因为docker只支持容器创建、运行的命令,不支持修改的命令。
    数据卷,是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
  2. 创建一个数据卷(虚拟的东西),使用命令创建两个数据卷,为html和conf,然后docker会给这两个数据卷创建对应、真实的目录,在宿主机(虚拟机)。
  3. /var/lib/docker/volumes/html/var/lib/docker/volumes/conf创建数据卷对应的目录。
  4. 然后让容器的conf和html目录与数据卷进行"挂载"。
  5. 关联以后,docker会实现宿主机目录与容器内目录的双向绑定,双向映射。
  6. 命令
    docker volume --help 查看数据卷命令
    docker rem -f nginx (先删除nginx容器)
    docker run -d --name nginx -p 80:80 -v html:/user/shar/nginx/html nginx (-v html:/user/shar/nginx/html,创建html数据卷,与容器内/user/shar/nginx/html这个文件进行挂载)
    docker volume ls(查看数据卷是否创建成功)
    docker volume inspect html(展示数据卷的详情信息)
    cd /var/lib/docker/volumes/html(进入虚拟机这个目录)
    cat index.html(查看文件内容,和我们的nginx内的html对应)
    然后就可以修改了。
本地目录挂载
  1. 先查看数据卷是否存在(查容器详情)
    docker inspect nginx
    其中,Mounst字段包含的信息就是挂载的信息。容器在创建时会自己生成一个数据卷,成为匿名卷
    但是在系统升级的时候,需要删除旧版本,然后安装新版本,但是匿名卷不会,所以定义容器的时候一定要定义数据卷。
  2. 执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录挂载,
    本地目录必须以"/"或"./"开头,否则会被系统识别为数据卷而非本地目录。
  3. 然后去docker hub官方网页,找到mysql的数据目录、配置文件、初始化脚本的挂载(容器内的目录在官方文档里都有写)
    a.挂载 /root/mysql/data 到容器内的 /var/lib/mysql 目录
    b.挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录
    c.挂载 /root/mysql/conf 到容器内的 /etc/mysql/conf.d 目录
  4. 命令
    首先创建mysql-data、init、conf目录
yaml 复制代码
    mkdir mysql
	cd mysql
	mkdir data
	mkdir init
	mkdir conf
复制代码
然后创建mysql容器并实现挂载

docker run -d \
      --name mysql \
	  -p 3306:3306 \
	  -e TZ=Asia/Shanghai \
	  -e MYSQL_ROOT_PASSWORD=123\
	  -v /root/mysql/data:/var/lib/mysql \
	  -v /root/mysql/init:/docker-entrypoint-initdb.d \
	  -v /root/mysql/conf:/etc/mysql/conf.d \
	  mysql
网络
  1. 默认情况下,所有容器都以bridge 方式连接到Docker 的一个虚拟网桥上,
    在安装docker的那一刻,docker就会在虚拟机里建一张虚拟网卡,这个网卡的名字默认叫docker0,并且还会根据网卡创建一个虚拟的网桥。
    它的地址是172.17.0.1/16 ,"/16"是这个ip地址的前16位是不能动的,一段的最大值是255,所以也就是172.17是不能动的。
    当我们安装了第一个容器时,它就会以桥接的方式与跟网桥建立连接,因此,不同容器之间是根据网桥建立连接,他们之间是可以相互访问的。
  2. 通过ip addr可以看到虚拟机的网卡
  3. 自定义网络
    加入了自定义的网络,也可以通过容器名相互访问,这样做的目的是重启某个容器,它的ip可能会变。
  4. 命令
    docker netword ls(查看自定义网络)
    docker netword create wang(自定义一个名为"wang"的网络)
    docker netword connect wang mysql(mysql加入wang网络)
    docker inspect mysql(查看mysql容器,就多出了一个自定义网桥)
    也可以在run容器的时候,连接到自定义网桥
    --network wang
    docker netword rm wang mysql(删除mysql)

docker实战

部署java项目
  1. 首先,准备Dockerfile(docker镜像,网上有现成的,搜一个jdk环境直接用就行)
  2. 在本地idea对项目进行打包,拿到.jar文件,和dockerfile一起放进虚拟机中
  3. docker build -t java1 .(构建一个java1的镜像,最新版本)
  4. dis查看,生成了java1镜像
yaml 复制代码
docker run -d \
    --name java \
	-p8080:8080 \
	--network wang \
	java(java镜像名字)
  1. docker logs -f java(查看镜像日志)
部署前端项目
  1. 创建一个新的容器,将conf与html进行挂载(在nginx.conf里配置了对目录的代理,要对地址进行修改)
  2. 上传准备好的前端项目和nginx.conf文件,然后对nginx.conf配置文件进行挂载
  3. 命令
yaml 复制代码
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/user/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network wang \(与java项目共享网络)
nginx
  1. dps
    查看nginx与java都正常启动
  2. 访问虚拟机地址:18080,可以正常访问页面。

DockerCompose

多容器操作,通过一个单独的docker-compose.yml模板文件,来定义一组相关联的应用容器,帮助我们来实现多个相互关联的Docker容器快速部署。

相关推荐
前行的小黑炭7 分钟前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
Java技术小馆12 分钟前
如何设计一个本地缓存
java·面试·架构
XuanXu1 小时前
Java AQS原理以及应用
java
风象南4 小时前
SpringBoot中6种自定义starter开发方法
java·spring boot·后端
mghio13 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室18 小时前
java日常开发笔记和开发问题记录
java
咖啡教室18 小时前
java练习项目记录笔记
java
鱼樱前端18 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea19 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq