Docker入门笔记(参考官方文档)

在这里插入图片描述

前言

感谢b站狂神,这篇是看视频时的笔记,同时参考了官方文档,文章中部分内容可能翻译的不是很准确,如若有的话请指出。另外,狂神的价值观我很认可,那些努力为自己梦想而奋斗的人啊!加油啊!趁着现在还年轻!还有着大把的时间可以挥霍尝试!

1.Docker 概述

1.1what ?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。

  • docker官网:https://www.docker.com/
  • docker官方文档:https://docs.docker.com/
  • docker官方仓库:https://hub.docker.com/

1.2 why?

docker和vm一样,同为虚拟化技术,但docker十分轻巧,它占用的空间少于VM(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要的VM和操作系统更少。这也是docker火的原因之一。

  • VM模拟的是完整的系统,需要虚拟出一套支撑系统运行的完整硬件,启动缓慢,占用内存非常大。
  • Docker模拟的不是完整的系统,容器内的应用直接运行在宿主机的内核之上且每个容器都是互相隔离的,每个容器都有自己的文件系统。启动时间为秒级,占用内存为MB级,可以充分发挥服务器的性能。

image-20210207183042750

1.3 how?

Docker三要素为容器(container)、镜像(image)、仓库(registry)。

  • 镜像:是一个只读的模板,相当于类,通过镜像可以创建多个容器。就好比使用类创建多个对象。可以简单理解为 镜像—>类,容器—>对象
  • 容器 :由镜像所创建,相当于一个对象,服务或项目就是运行在容器之中的。 是一个独立的文件系统
  • 仓库:存放镜像的位置。官方的仓库为docker hub,国内也有较多的仓库,如阿里云。

image-20210207161213352

docker是一个CS(client-server)结构的系统,用户通过客户端来操作后台的守护进程,从而操作主机上的Docker-cerver。

image-20210207182636557

2.Docker安装

Docker在mac、windows、linux上都可以安装,这里仅讲述在linux中安装。如需其它,可以查看官方帮助文档:https://docs.docker.com/engine/install

2.1 自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.2 Ubuntu手动安装

docker支持以下版本的ubuntu版本(x86_64 、amd64、 armhf、 arm64)

Ubuntu Focal 20.04 (LTS)

Ubuntu Bionic 18.04 (LTS)

Ubuntu Xenial 16.04 (LTS)

  • 注意如果已经含有旧版本的docker请先执行下面的命令来卸载旧版本的docker

    sudo apt-get remove docker docker-engine docker.io containerd runc
    
    sudo apt-get purge docker-ce docker-ce-cli containerd.io
    
    sudo rm -rf /var/lib/docker
    
  • 更新apt软件源

    sudo apt update
    
  • 允许apt通过HTTPS使用存储库

    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    
  • 添加Docker的阿里云GPG密钥

    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    
  • 设置docker的稳定存储库

    # x86/amd64 这里使用的是阿里云的docker仓库
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    
  • 再次更新apt源

    sudo apt update
    
  • 安装docker

     sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  • 设置docker自启动

sudo systemctl enable docker.service
  • 如果当前用户不是root,请执行以下命令讲当前用户加入到docker用户组中

    sudo groupadd docker
    sudo usermod -aG docker ${USER}
    sudo systemctl restart docker
    newgrp - docker
    
  • 检查是否安装

    # 查看docker版本
    docker -v
    #输出类似下方内容表示安装成功
    Docker version 20.10.2, build 2291f61
    

2.3 Centos7手动安装

  • 安装必要的一些系统工具

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 添加软件源信息

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 更新

    sudo yum makecache fast
    
  • 安装docker

    sudo yum -y install docker-ce docker-ce-cli containerd.io
    
  • 启动docker

    sudo systemctl enable --now  docker
    
    • systemctl:管理系统进程
    • enables:设置开机启动
    • –now:现在启动
    • docker:启动的进程名称
  • 检查是否安装

    # 查看docker版本
    docker -v
    #输出类似下方内容表示安装成功
    Docker version 20.10.2, build 2291f61
    

2.4使用镜像加速器

由于Docker默认的仓库是使用官方的仓库,而官方仓库是在国外,所以网速非常慢。因此我们使用阿里云的镜像加速器。

  • 注册或登录阿里云账号
  • 阿里云docker镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,登录之后在左侧就可以看到镜像加速器,点击,然后根据提示将自己的加速器地址配置到本地即可

至此,Docker安装完成,若安装失败请先查看失败原因,重装或查看官方帮助文档:https://docs.docker.com/engine/install

# 3.Docker命令

docker命令的官方详细教程文档:https://docs.docker.com/reference/

3.1 常用命令

3.1.1 查看docker版本
	docker version

输出

Client: Docker Engine - Community
 Version:           20.10.2
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        2291f61
 Built:             Mon Dec 28 16:17:32 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.2
……
……
……
3.1.2 查看Docker系统信息
docker info

输出

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 2
  Running: 1
  Paused: 0
………
……
…

3.1.3 查看命令帮助
docker 命令 --help

## 3.2镜像命令

3.2.1 搜索镜像

命令

 	docker search [OPTIONS] TERM

参数

参数描述
--filter , -f根据提供的条件筛选后输出
--format进行格式化展示
--limit最大搜索结果,默认25条
--no-trunc不截断输出

Example

rabbit•~•»»» docker search mysql                                                                                                                                            
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10471     [OK]       
mariadb                           MariaDB is a community-developed fork of MyS…   3894      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   768                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   526       [OK]       
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   87                   
mysql/mysql-cluster               Exper
3.2.2 查看本地镜像

命令

docker images [OPTIONS] [REPOSITORY[:TAG]]

参数

参数描述
--all , -a显示所有镜像
--digests显示摘要
--filter , -f根据提供的条件筛选后输出
--format进行格式化展示
--no-trunc不截断输出
--quiet , -q仅显示镜像ID

Example

rabbit•~•»»»docker images                                                                                                                                                             
REPOSITORY      TAG    		   IMAGE ID       				CREATED    		    SIZE
mysql          			 latest      c8562eaf9d81   		   2 weeks ago    546MB
bestwu/qq      		 office    f429bf9a4ac4  			  4 weeks ago    902MB
bestwu/wechat   latest   dc95baea4912  		      4 weeks ago    864MB
centos       			   7        	 8652b9f0cb4c 			  2 months ago   204MB
                                                     
  • repository: 镜像网站/镜像名称
  • tag: 镜像版本/标签
  • image id: 镜像id
  • created:镜像源创建时间
  • size:镜像大小
3.2.3 下载镜像

命令

docker pull 镜像:版本号   # 指定版本号
docker pull 镜像                     # 默认是最新版本

Example

rabbit•~•»»»docker pull ubuntu                                                                                                                                                  
Using default tag: latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete 
14428a6d4bcd: Pull complete 
2c2d948710f2: Pull complete 
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
3.2.4 删除镜像

命令

docker rmi -f 镜像ID/镜像名称             # 删除指定镜像
docker rmi -f $(docker images -aq)   # 删除全部镜像

Example

rabbit•~•»»»docker images                                                                                                                                                           
REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
mysql           latest    c8562eaf9d81   2 weeks ago    546MB
bestwu/qq       office    f429bf9a4ac4   4 weeks ago    902MB
bestwu/wechat   latest    dc95baea4912   4 weeks ago    864MB
ubuntu          latest    f643c72bc252   2 months ago   72.9MB
centos          7         8652b9f0cb4c   2 months ago   204MB

rabbit•~•»»»docker rmi -f f643c72bc252                                                                                                                                           
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Deleted: sha256:f643c72bc25212974c16f3348b3a898b1ec1eb13ec1539e10a103e6e217eb2f1
Deleted: sha256:9386795d450ce06c6819c8bc5eff8daa71d47ccb9f9fb8d49fe1ccfb5fb3edbe
Deleted: sha256:3779241fda7b1caf03964626c3503e930f2f19a5ffaba6f4b4ad21fd38df3b6b
Deleted: sha256:bacd3af13903e13a43fe87b6944acd1ff21024132aad6e74b4452d984fb1a99a

3.3 容器命令

3.3.1 创建容器(重点)

命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

参数

说明:docker run 的参数多达几十种,这里仅介绍常用参数,更多参数介绍请使用 --help 或直达官方docke run 帮助文档:https://docs.docker.com/engine/reference/commandline/run/

参数示例/详细描述
–name–name=mysql1指定容器名称
- d放置后台运行
-i交互模式
-t-it启动终端,常与-i组合使用
-p指定端口
-p ip:主机端口:容器端口端口映射1
-p 主机端口:容器端口端口映射2
-p 容器端口指定容器端口
-P随机指定端口
-e环境配置
-v数据卷挂载(后面会讲到)

Example

# 创建一个名字为centos_test的centos7的容器,并直接进入后台
rabbit•~•»»»docker run -it --name centos_test centos:7 /bin/bash                                                  
[root@6c93d967edd3 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
3.3.2退出容器
  • 停止并退出容器

    root@ed09e4490c57:/# exit
    
3.3.3查看容器

命令

docker ps [OPTIONS]

参数

参数默认值描述
--all , -a显示所有的容器
--filter , -f根据提供的条件筛选后输出
--format进行格式化展示
--last , -n1显示最后创建的容器(包括所有容器)
--latest , -l显示最新创建的容器(包括所有容器)
--no-trunc不间断输出
--quiet , -q仅显示容器ID
--size , -s显示容器大小
3.3.4 删除容器

命令

docker rm [OPTIONS] CONTAINER [CONTAINER...]

参数

参数描述
--force , -f强制删除所有容器
--link , -l删除指定的链接
--volumes , -v删除与容器关联的匿名卷

Example

rabbit•~•»»»docker ps                                                                                               
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
5dfadbfaf166   centos:7   "/bin/bash"   10 seconds ago   Up 9 seconds              centos3
a40c7e77eecb   centos:7   "/bin/bash"   16 seconds ago   Up 14 seconds             centos2
60a7d3d88b21   centos:7   "/bin/bash"   21 seconds ago   Up 20 seconds             centos1

rabbit•~•»»»docker ps -a                                                                                          
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
5dfadbfaf166   centos:7   "/bin/bash"   18 seconds ago   Up 18 seconds             centos3
a40c7e77eecb   centos:7   "/bin/bash"   24 seconds ago   Up 23 seconds             centos2
60a7d3d88b21   centos:7   "/bin/bash"   29 seconds ago   Up 28 seconds             centos1

rabbit•~•»»»docker rm -f centos3                                                                               
centos3

rabbit•~•»»»docker rm -f $(docker ps -aq)                                                                   
a40c7e77eecb
60a7d3d88b21

3.3.5 进入容器

命令

docker exec -it 容器ID

Example

rabbit•~•»»»docker ps                                                                                                                                                              
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
64b9f94d1adb   centos:7   "/bin/bash"   37 minutes ago   Up 37 minutes             centos3

rabbit•~•»»»docker exec -it 64b9f94d1adb /bin/bash                                                                                                                               
[root@64b9f94d1adb /]# 

3.3.6 停止/启动/重启容器
docker start 容器ID/容器名称           # 启动
docker stop 容器ID/容器名称           # 停止
docker restart 容器ID/容器名称      # 重启

## 3.4 其它命令

3.4.1 查看日志

命令

docker logs [OPTIONS] CONTAINER

参数

参数默认值描述
--details显示提供给日志的额外详细信息
--follow , -f跟踪日志输出
--since显示自时间戳(例如2013-01-02T13:23:37Z)或相对(例如42m, 42分钟)以来的日志
--tail , -n从日志的末尾开始显示行数(后需要加上参数)
--timestamps , -t显示时间戳
--until显示时间戳之前的日志(例如2013-01-02T13:23:37Z)或相对的日志(例如42m for 42 minutes)
3.4.2 查看容器进程

命令

docker top CONTAINER [ps OPTIONS]

Example

rabbit•~•»»»docker top 64b9f94d1adb                                                                              
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7848                7826                0                   13:55               ?                   00:00:00            /bin/bash              
3.4.3 查看镜像的元数据

命令

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

参数

参数描述
--format , -f根据给出的模板格化输出
--size , -s显示容器大小
--type返回指定类型的JSON

Example

rabbit•~•»»»docker inspect 64b9f94d1adb                                                                                                                                            
[
    {
        "Id": "64b9f94d1adb67e797e8537ad8a1641fbd8953ec2d9629f1a4a336fc46068748",
        "Created": "2021-02-08T05:55:36.648918967Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 7848,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-02-08T05:55:36.994219512Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
……
……
……
3.4.4 文件传输

命令

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-   # 从容器cp到主机
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH  # 从主机cp到容器

Example

# 从主机cp到容器
rabbit•~•»»»docker ps                                                                                                                                                            
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
64b9f94d1adb   centos:7   "/bin/bash"   49 minutes ago   Up 49 minutes             centos3

rabbit•~•»»»docker cp 01_hello.sh 64b9f94d1adb:/root/     

rabbit•~•»»»docker exec -it 64b9f94d1adb /bin/bash 
[root@64b9f94d1adb /]# cd /root/
[root@64b9f94d1adb ~]# ls
01_hello.sh  anaconda-ks.cfg

# 从容器cp到主机
[root@64b9f94d1adb ~]# vi a.txt
[root@64b9f94d1adb ~]# ls
01_hello.sh  a.txt  anaconda-ks.cfg
[root@64b9f94d1adb ~]# exit
exit
rabbit•~•»»»docker cp 64b9f94d1adb:/root/a.text .                                                                                                                                 
rabbit•~•»»»ls                                                                                                                                                                     
 a.txt    
3.4.5 打包容器

命令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

参数

参数默认值描述
--author , -a作者
--change , -c添加Dockerfile用来创建新的镜像
--message , -m提交信息
--pause , -ptrue在提交过程中暂停容器

Example

rabbit•~•»»»docker images                                                                                                                                                         
REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
mysql           latest    c8562eaf9d81   2 weeks ago    546MB
tomcat          latest    040bdb29ab37   3 weeks ago    649MB
nginx           latest    f6d0b4767a6c   3 weeks ago    133MB
bestwu/qq       office    f429bf9a4ac4   4 weeks ago    902MB
bestwu/wechat   latest    dc95baea4912   4 weeks ago    864MB
centos          7         8652b9f0cb4c   2 months ago   204MB

rabbit•~•»»»docker run -dit --name centos_1 centos:7 /bin/bash
rabbit•~•»»»docker exec -it centos_1 /bin/bash   
[root@626b5733e8e1 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@626b5733e8e1 /]# vi testFile.txt
[root@626b5733e8e1 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  testFile.txt  tmp  usr  var
[root@626b5733e8e1 /]# exit
exit

rabbit•~•»»»docker ps                                                                                                                                                           
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS          PORTS     NAMES
626b5733e8e1   centos:7   "/bin/bash"   2 minutes ago   Up 18 seconds             centos_1

rabbit•~•»»»docker commit -a "rabbit" -m "commit a new centos:7 images" 626b5733e8e1 centos7:1.0                                                                                     
sha256:e80b6bff4707966ef5bddde23520dba5da9fb488cc26a209dd67050c6bb87b51

rabbit•~•»»»docker images                                                                                                                                                      
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
centos7         1.0       e80b6bff4707   9 seconds ago   204MB
mysql           latest    c8562eaf9d81   2 weeks ago     546MB
tomcat          latest    040bdb29ab37   3 weeks ago     649MB
nginx           latest    f6d0b4767a6c   3 weeks ago     133MB
bestwu/qq       office    f429bf9a4ac4   4 weeks ago     902MB
bestwu/wechat   latest    dc95baea4912   4 weeks ago     864MB
centos          7         8652b9f0cb4c   2 months ago    204MB

4. 联合文件系统

Docker联合文件系统(Union File System),它是实现Docker镜像的技术基础,是一种轻量级的高性能分层文件系统,支持将文件系统中的修改进行提交和层层叠加,这个特性使得镜像可以通过分层实现和继承。同时支持将不同目录挂载到同一个虚拟文件系统下。

在Docker镜像分为基础镜像和父镜像,没有父镜像的镜像被称为基础镜像。用户是基于基础镜像来制作各种不同的应用镜像。这些应用镜像共享同一个基础镜像层,提高了存储效率。

image-20210208175631323 image-20210208180314858

当用户通过升级程序到新版本,改变了一个Docker镜像时,一个新的镜像层会被创建。因此,用户不用替换整个原镜像或者完全重新建立新镜像,只需要添加新层即可。在用户分发镜像的时,也只需要分发被改动的新层内容(增量部分)。这让Docker的镜像管理变得十分轻松级和快速。典型的案例就是docker commit:每次打包都是在原有的镜像基础上添加一个新的镜像层,可以通过docker inspect 命令查看分层(Layers)

Example:

# 进入容器并下载Python3
rabbit•~•»»»docker exec -it centos_1 /bin/bash                                                                                                                                   
[root@626b5733e8e1 /]# yum install -y python3
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 ……
……
# 退出容器
[root@626b5733e8e1 /]#exit
# 打包镜像
rabbit•~•»»»docker commit -a "rabbit" -m "commit a new centos:7 images" 626b5733e8e1 centos7:1.0 
# 查看镜像
rabbit•~•»»»docker images                                                                                                                                                          
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
centos7         1.0       76c2e84d2ea3   6 minutes ago   353MB    # commit
centos          7         8652b9f0cb4c   2 months ago    204MB        # pull

# 查看centos的 系统信息
rabbit•~•»»»docker inspect 8652b9f0cb4c                                                                                                                                             
[	
……
 "Layers": [
                "sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02"
            ]
……
]

#查看commit的centos7的系统信息
rabbit•~•»»»docker inspect 76c2e84d2ea3                                                                                                                                              
[
……
 "Layers": [
                "sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02",
                "sha256:72f71d0f186e0da2eaf87c7cb801afd9159440f8edbe58b543da33c6fdb0d7b9"
            ]
 ……
  ]

5.数据卷

5.1 了解数据卷

  • 实现数据的持久化,将数据同步到容器外,容器结束后,数据仍然存在
  • 容器之间可以共享数据

image-20210209200955959

5.2 使用数据卷

5.2.1 指定路径挂载

命令

docker run -v 主机文件目录:容器文件目录 image /bin/bash

在容器运行时使用-v参数,实现宿主机指定目录与容器指定目录双向绑定。

Example

运行一个容器,并将其/home与宿主机/home/rabbit/test目录绑定。通过测试可以看出,实现了文件的双向同步。

image-20210209205625498

练习:部署MySQL

rabbit•~•»»»docker images                                                           
REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
centos7         1.0       76c2e84d2ea3   27 hours ago   353MB
mysql           latest    c8562eaf9d81   3 weeks ago    546MB
tomcat          latest    040bdb29ab37   3 weeks ago    649MB

rabbit•~•»»»docker run -dit --name mysql1 -v /home/mysql/cnfig:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql                 
f90ffab02e11a94d2d50d9ed1f6145a4d1f3580b01cd33660c37a1c21a7b9265
# -dit 后台运行
# --name 容器名称
# -v 挂载目录
# -p 端口映射
# -e 配置信息

rabbit•/home/mysql•»»»cd data                                                                                                                                                        

rabbit•/home/mysql/data•»»»ls                                                                                                                                                    
 auto.cnf        binlog.index   client-cert.pem   '#ib_16384_0.dblwr'   ibdata1       ibtmp1          mysql.ibd            public_key.pem    sys
 binlog.000001   ca-key.pem     client-key.pem    '#ib_16384_1.dblwr'   ib_logfile0  '#innodb_temp'   performance_schema   server-cert.pem   undo_001
 binlog.000002   ca.pem         f90ffab02e11.err   ib_buffer_pool       ib_logfile1   mysql           private_key.pem      server-key.pem    undo_002
  • 测试链接

    image-20210210093727035

5.2.2 匿名挂载

在挂载数据卷的时候仅指定容器内的文件名称

docker run -v /etc/mysql

Example

# 创建mysql2, 匿名挂载容器目录 /etc/mysql 和/var/lib/mysql
rabbit•/home/mysql/data•»»»docker run -dit --name mysql2 -v /etc/mysql -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306 mysql /bin/bash
f18306ca3a252f59ebc827fcc16fa825cee2a9cc1db98bed8c5b14d03f52cb0f

# 查看docker volume命令 
rabbit•/home/mysql/data•»»»docker volume --help                                                                                                                                       
Usage:  docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

# 查看挂载的数据卷
rabbit•/home/mysql/data•»»»docker volume ls                                                                                                                                           
DRIVER    VOLUME NAME
local     a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577
local     ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81

# 查看挂载的数据卷的位置
rabbit•/home/mysql/data•»»»docker volume inspect a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577                                                                     
[
    {
        "CreatedAt": "2021-02-10T10:30:19+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577/_data",
        "Name": "a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577",
        "Options": null,
        "Scope": "local"
    }
]
rabbit•/home/mysql/data•»»»docker volume inspect ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81                                                                     
[
    {
        "CreatedAt": "2021-02-10T10:30:19+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81/_data",
        "Name": "ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81",
        "Options": null,
        "Scope": "local"
    }
]

5.2.3 具名挂载

给挂载的数据卷命名一个名称

命令

docker run -v 卷名:容器内路径

Example

# 创建数据库mysql3,具名挂载容器目录  etc/mysql 和/var/lib/mysql
rabbit•~•»»»docker run -dit --name mysql3 -v jumingguazai1:/etc/mysql -v jumingguazai2:/var/lib/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql /bin/bash                 
59513c8cec5b78be7d58ffd455b267ffb71b3ecc83080fa79332019562f3d41a
# 查看数据卷
rabbit•~•»»»docker volume ls                                                                                                                                                       
DRIVER    VOLUME NAME
local     jumingguazai2
local     jumingguazai1
# 查看数据卷jumingguazai1的详细信息
rabbit•~•»»»docker volume inspect jumingguazai1                                                                                                                                    
[
    {
        "CreatedAt": "2021-02-10T10:44:52+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/jumingguazai1/_data",
        "Name": "jumingguazai1",
        "Options": null,
        "Scope": "local"
    }
]
# 查看数据卷jumingguazai2的详细信息
rabbit•~•»»»docker volume inspect jumingguazai2                                                                                                                                      
[
    {
        "CreatedAt": "2021-02-10T10:44:52+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/jumingguazai2/_data",
        "Name": "jumingguazai2",
        "Options": null,
        "Scope": "local"
    }
]
5.2.4 权限设置

对容器内的文件权限进行设置,使得挂载的文件只能在宿主机中读写。

命令

docker run -v juming:/etc/mysql:ro mysql /bin/bash
docker run -v juming:/etc/mysql:rw mysql /bin/bash

6. Dockerfile

docker通过解释Dockerfile中的指令,可以来构建一个自定义的docker镜像。可以说Dockerfile是的一个命令参数脚本文件。docker中每执行一条指令,都会新建一层镜像。

image-20210214093643671

6.1 构建Dockerfile

Dockerfile中的指令含义如下:

参数描述解释
FROMFROM centos:7基础镜像,构建的镜像就是在此镜像基础上形成的
MAINTAINERMAINTAINER rabbit< 1234567@qq.com >镜像作者,一般为: 作者+邮箱
RUN编译镜像是运行的脚本指令
ENV容器的环境变量
LABEL设置镜像的标签
ONBUILD构建一个被继承的Dockerfile
USER指定 RUN CMD 等指定执行用户
VOLUME挂载的数据卷
WORKDIR镜像的工作目录
COPY./readme.txt /usr/localreadme.txt编译镜像时复制文件到容器中
ADD编译镜像时复制文件到容器中(自动解压)
EXPOSE保留端口配置
CMD指定容器启动后需要运行的命令(覆盖,仅最后一个有效)
ENTRYPOINT指定容器启动后需要运行的命令,不覆盖,可追加)

6.2 使用docker build 运行(重点)

命令

docker build -f Dockerfile -t 目标镜像名称:版本号 生成路径 

Example

#Dockerfile内容
FROM    centos:7
MAINTAINER      rabbit<1234567@qq.com>
ENV     MYPATH /home
WORKDIR $MYPATH
RUN     yum install vim -y
RUN     yum install net-tools -y
EXPOSE  80
CMD     echo "--------ok------------"
# 运行命令
rabbit•~/dockerfile•»»»docker build -f Dockerfile -t mycentos:7.1 .   

Sending build context to Docker daemon  2.048kB
Step 1/8 : FROM	centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
 ---> 8652b9f0cb4c
Step 2/8 : MAINTAINER	rabbit<1234567@qq.com>
 ---> Running in a58b05fa8b1b
Removing intermediate container a58b05fa8b1b
 ---> 228d96fc7ab7
Step 3/8 : ENV	MYPATH /home
 ---> Running in 5df54a4392ff
Removing intermediate container 5df54a4392ff
 ---> 5b42216713df
Step 4/8 : WORKDIR	$MYPATH
 ---> Running in e4989809e670
Removing intermediate container e4989809e670
 ---> ee9f49f726c9
Step 5/8 : RUN	yum install vim -y
……
……
……
Successfully built dc8102fdbb65
Successfully tagged mycentos:7.1

后记

转载请注明出处,感谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值