Docker实战

2024-01-08 23:02:24

docker的安装

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

然后配置Docker的yum源

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

docker的使用

docker部署mysql
命令:

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目录
    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镜像
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. 命令
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容器快速部署。

文章来源:https://blog.csdn.net/qq_53999369/article/details/135459744
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。