欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[docker]docker基本使用

程序员文章站 2022-06-16 21:24:59
...

docker[Centos 7]:
个人理解的docker,核心为镜像和容器。docker可以运行在各大系统上,这里记录运用在linux上的情况。其中,镜像可以理解为就是一个打包完毕的对应应用的安装介质,容器可以理解为一个一个独立的用来放镜像对应应用的独立沙箱。

常用命令:
1.docker相关命令:
安装命令:

卸载旧版本yum -y remove docker docker-common docker-selinux docker-engine

安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2

设置stable镜像仓库yum-config-manager --add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引yum makecache fast

安装DOCKER CEyum -y install docker-ce

测试docker version

卸载systemctl stop docker yum -y remove docker-ce rm -rf /var/lib/docker

查看是否安装完毕 docker -v

启动 systemctl start docker

关闭 systemctl stop docker

状态 systemctl status docker

开机自启 systemctl enable docker

2.配置阿里云镜像加速
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-‘EOF’ { “registry-mirrors”: [“https://sd7sgxrc.mirror.aliyuncs.com”] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 直接运行即可

3.镜像相关命令:
查看目前有的镜像:docker images

搜索镜像 : docker search images(可以上hub.docker.com进行查找)

下载镜像:docker pull 镜像名字:版本号 例: docker pull redis:5.0

删除镜像:

3.1 删除单个: docker rmi -f 镜像ID

3.2 删除多个: docker rmi -f 镜像名1:版本号 镜像名2:版本号

3.3 删除全部 : docker rmi -f docker images -p (这里`为esc下方按键 其实就是列出所有镜像 名 然后删除)

4.容器命令
新建并启动交互型容器(exit后就退出容器) : docker run -it --name=xx 镜像名:版本号 /bin/bash

新建并启动守护型容器 : docker run id --name=xx 镜像名:版本号

i :与容器交互 t: 终端 d:守护进程 it:打开容器的时候,直接打开终端,一旦exit,离开终端同时该容器会被关闭. id:打开容器的时候,为守护进程,不直接打开终端,exit不会关闭容器。若需要进入终端, 使用exec命令

查看正在运行的容器: docker ps

查看所有容器(不管是否在运行) docker ps -a

若是守护进程类型的容器,打开终端与其交互命令: docker exec -it 容器名 /bin/bash

启动容器 docker start 容器ID/容器名称

关闭容器 docker stop 容器ID/容器名称

删除容器 docker rm 容器ID/容器名称

查看容器信息 docker inspect 容器ID/容器名称

5.数据卷
个人理解:docker大体的结构是 主机 - 容器 ,数据卷就是一个 目录或者文件 ,用于和容器进行绑定的一个东西。可用于持久数据。

用法 : 创建启动容器时 使用-v命令 如: docker run id/it --name=xx -v /root/data:/root/container [格式 : docker run … -v 宿主机目录(文件):容器内目录(文件)]

6.数据卷容器
个人理解:主要作用,就是创建一个容器,专门和宿主机进行绑定。而后有要和这个数据卷绑定的,直接和该容器绑定即可。相当于第5点数据卷中,多个容器想绑定同个目录时,分别创建-v 去绑定相同宿主机目录一样.

用法 :

创建数据卷容器 docker run -it --name = c3 /volume centos:7 /bin/bash(如果直接这样写 他会在宿主机分配一个地址,可以通过docker inspect 容器ID/容器名称进行查看)

创建要和该数据卷容器绑定的容器:

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash

docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

这样 c1 c2 c3则已经完全绑定一起,共享同一个数据卷

7. mysql应用部署

  1. 搜索mysql镜像

docker search mysql

  1. 拉取mysql镜像

docker pull mysql:5.6

  1. 创建容器,设置端口映射、目录映射

在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql

cd ~/mysql

docker run -id \

-p 3306:3306 \

–name=docker_mysql5.7 \

-v $PWD/conf:/etc/mysql/conf.d \

-v $PWD/logs:/logs \

-v $PWD/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=Cx776815 \

mysql:5.7

  • 参数说明:

  • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。

  • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录

  • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录

  • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录

  • **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。

  1. 进入容器,操作mysql

docker exec –it c_mysql /bin/bash

8.Tomcat 部署
过程如同部署mysql , 分为四步,找到自己要的镜像,拉取下来到docker,创建对应的tomcat容器,创建时将数据卷设置好。真正运用的时候,个人认为最好将数据卷定位到tomcat文件夹 而非webapps 可以方便启动 或者 关闭等 还未进行实战

实战记录

  1. 部署tomcat

docker run -id --name=c_tomcat -p 8080:8080 -v /root/tomcat/bin:/usr/local/tomcat/bin -v /root/tomcat/webapps:/usr/local/tomcat/webapps -v $PWD/logs:/usr/local/tomcat/logs -v $PWD/conf:/usr/local/tomcat/conf tomcat /bin/bash

创建成功,但是容器那边的bin conf logs webapps 均变成了空 故是有问题的

最终还是只对webapps文件夹进行了数据卷操作。

docker run -id --name=c_tomcat -p 80:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat /bin/bash

最终查询资料得:

数据的覆盖问题

如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。

如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。

这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

双喜鸟

相关标签: docker