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容器快速部署。

相关推荐
计算机毕设指导610 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
淡水猫.10 分钟前
Fakelocation Server服务器/专业版 ubuntu
运维·服务器·ubuntu
Gu Gu Study11 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data14 分钟前
二叉树oj题解析
java·数据结构
wenyue112116 分钟前
Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析
运维·中间件·监控
牙牙70519 分钟前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
时光の尘26 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
paopaokaka_luck27 分钟前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
我们的五年30 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
以后不吃煲仔饭40 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言