docker基本使用

网友投稿 782 2022-05-30

docker[Centos 7]:

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

常用命令:

安装命令:

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

docker基本使用

安装需要的软件包 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

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 直接运行即可

查看目前有的镜像: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下方按键 其实就是列出所有镜像 名 然后删除)

新建并启动交互型容器(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/容器名称

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

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

个人理解:主要作用,就是创建一个容器,专门和宿主机进行绑定。而后有要和这个数据卷绑定的,直接和该容器绑定即可。相当于第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则已经完全绑定一起,共享同一个数据卷

1. 搜索mysql镜像

docker search mysql

2. 拉取mysql镜像

docker pull mysql:5.6

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

# 在/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 用户的密码。

4. 进入容器,操作mysql

docker exec –it c_mysql /bin/bash

过程如同部署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 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【IoT美学】华为物联网解决方案
下一篇:Python 作用域和命名空间
相关文章