docker学习笔记

docker 操作日志

# 环境检查  系统内核
uname -r 
# 系统版本
 cat /etc/os-release 


# 1、卸载docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2、需要的安装包
yum install -y yum-utils

# 3、设置镜像仓库   默认是国外的  
     #国外的
        yum-config-manager \
            --add-repo \
            https://download.docker.com/linux/centos/docker-ce.repo
      #阿里云镜像仓库地址
       yum-config-manager \
            --add-repo \
            http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、更新yum索引  保持环境一致   yum makecache  fast   centos8  不需要带fast参数
	yum makecache   


# 5、安装docker引擎   docker-ce  社区版   docker-ce-cli   containerd.io
   yum install docker-ce docker-ce-cli containerd.io

报错如下
#Error: 
 Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering
  - package containerd.io-1.3.7-3.1.el7.x86_64 is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解决方案
centos8默认使用podman代替docker,所以需要containerd.io,那我们就安装一下就好了
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
继续安装 docker-ce
 yum install docker-ce
 
# 6、启动docker
systemctl start docker
docker version    #查看是否安装成功

# 7、 测试helloworld 程序
docker run hello-world

# 8、 查看hello-world 镜像

#卸载docker 
#卸载Docker Engine,CLI和Containerd软件包:
yum remove docker-ce docker-ce-cli containerd.io
#主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
 rm -rf /var/lib/docker
 
# 9、配置阿里云加速器  这个配置在阿里云服务器  容器镜像服务>镜像加速器>centos里面直接复制就好了
    sudo mkdir -p /etc/docker
	sudo tee /etc/docker/daemon.json <<-'EOF'
	{
  		"registry-mirrors": ["https://d8ll6dh6.mirror.aliyuncs.com"]
	 }
	EOF
	sudo systemctl daemon-reload
	sudo systemctl restart docker

阿里云设置的地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

在这里插入图片描述

docker命令

docker run

docker run --help  查看命令
docker run  [options] image [command] [arg...]

docker run -i -t --name mytest centos:latest /bin/bash
# -d 后台方式运行
# -i 标识使用交互模式,诗中保持输入流开放
# -t 标识分配一个伪终端,两个参数结合使用 -it 即可以在容器中利用打开的伪终端进行交互操作 
# --name 指定启动容器的名字 不指定会随机分配一个名字
# -c 用于给运行在容器中的所有进程分配cpu的shares值(权重)
# -m 用于限制为容器中所有进程分配的内存总量(单位 B K M G)
# -V 挂载volumn 可以用多个 -v 参数 同时挂载多个volumn ,volumn格式为[host-dir]:[container-dir]:[rw|ro]
# -p 用于将容器的端口暴露给宿主机的端口,格式为 hostPort:container-port
# -P 随机指定端口 (大写P)

docker pull

拉取镜像 Pull an image or a repository from a registry
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# docker pull centos  获取centos:latest 镜像
# docker pull centos:centos 12.22.1 拉取指定版本的镜像

docker push

推送镜像 Push an image or a repository to a registry
docker push [OPTIONS] NAME[:TAG]

docker images

列出主机上的镜像 默认只列出最顶层的镜像,-a可以列出所有镜像
docker images [options] [repository[:tag]]

docker rmi

docker rmi  删除镜像 如果已有基于该镜像启动的容器存在,则无法删除  可以-f 强制删除
docker rm +id 删除容器 可以同时删除多个容器 



docker version   当前docker的版本信息
docker info     显示docker的系统信息包括容器的信息
docker  命令 --help  查询命令信息




[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker pull mysql
Using default tag: latest   # 如果不带tags 默认下载最新版
latest: Pulling from library/mysql
d121f8d1c412: Pull complete   # 分层下载
f3cebc0b4691: Pull complete 
1862755a0b37: Pull complete 
489b44f3dbb4: Pull complete 
690874f836db: Pull complete 
baa8be383ffb: Pull complete 
55356608b4ac: Pull complete 
dd35ceccb6eb: Pull complete 
429b35712b19: Pull complete 
162d8291095c: Pull complete 
5e500ef7181b: Pull complete 
af7528e958b6: Pull complete 
Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #真实地址


[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
d121f8d1c412: Already exists   #之前下载的层不会重新下载
f3cebc0b4691: Already exists 
1862755a0b37: Already exists 
489b44f3dbb4: Already exists 
690874f836db: Already exists 
baa8be383ffb: Already exists 
55356608b4ac: Already exists 
277d8f888368: Pull complete 
21f2da6feb67: Pull complete 
2c98f818bcb9: Pull complete 
031b0a770162: Pull complete 
Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@iZ2zedscyfod03wjkvxrk2Z ~]# 

[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 ef08065b0a30        12 days ago         448MB
mysql               latest              e1d7dc9731da        12 days ago         544MB
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker rmi -f e1d7dc9731da   删除指定的image

docker pull centos   #下载centos

[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker run -it centos /bin/bash   #以交互进入容器,启动并进入centos容器
[root@be7dd20e4011 /]# exit   #容器停止, 退出容器   ctrl+p+Q  容器不停止退出容器

docker save

把镜像保存成一个压缩包
docker save [OPTIONS] IMAGE [IMAGE...]
Options:
  -o, --output string   Write to a file, instead of STDOUT
  
[root@hcss-ecs-fe15 xiaoqu]# docker save -o nginx01.tar nginx:latest
[root@hcss-ecs-fe15 xiaoqu]# ls
nginx01.tar  nginx-1.15.0  nginx-1.15.0.tar.gz

docker load

把镜像的压缩包加载成镜像
docker load [OPTIONS]
Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output
  
[root@hcss-ecs-fe15 xiaoqu]# docker load -i nginx01.tar 
2edcec3590a4: Loading layer [==================================================>]  83.86MB/83.86MB
e379e8aedd4d: Loading layer [==================================================>]     62MB/62MB
b8d6e692a25e: Loading layer [==================================================>]  3.072kB/3.072kB
f1db227348d0: Loading layer [==================================================>]  4.096kB/4.096kB
32ce5f6a5106: Loading layer [==================================================>]  3.584kB/3.584kB
d874fd2bc83b: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest

docker ps

[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps   # 列出正在运行的容器
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -a    #列出当前正在运行的容器+历史运行过的容器
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -n=1  # 显示最近创建的容器   n=1 一个  n=2 两个
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -aq  #正在运行的容器+历史运行过的容器的编号

docker rm

docker rm +id  #移除镜像  不能移除正在运行的镜像
docker rm +id  #移除镜像  强制删除运行的容器
docker rm -f $(docker ps -aq)   # 表达式删除所有容器

启动和停止容器

docker start 容器id
docker restart 容器id  ()
docker stop 容器id
docker kill 容器id

[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -it centos /bin/bash   #运行
[root@5c65f59c8f1a /]# exit     #退出
exit
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps    #查看正在运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -a  # 查看正在运行和历史运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
5c65f59c8f1a        centos              "/bin/bash"         17 seconds ago      Exited (0) 11 seconds ago                       jovial_rhodes
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker start 5c65f59c8f1a  #启动历史运行过的容器
5c65f59c8f1a
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps  #查看正在运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5c65f59c8f1a        centos              "/bin/bash"         41 seconds ago      Up 8 seconds                            jovial_rhodes
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker stop 5c65f59c8f1a  #停止
5c65f59c8f1a
[root@iZ2zedscyfod03wjkvxrk2Z /]# 

后台启动容器

[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -d centos   #后台运行centos  
f0daa3444a43ecf9de1d20bc6edcd4eeb7e70dbc99275eabf76a92af8032b6dd
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps   # 查看发现centos停止了,原因是docker容器使用后台运行,必须要有一个前台进程,docker发现没有应用就自动停止了  常见的坑  nginx容器启动后,发现自己没提供服务,就会立刻停止
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iZ2zedscyfod03wjkvxrk2Z /]# 

查看日志命令

docker logs --help
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker logs -f -t --tail 10 367da1071009  # 显示指定行数的日志  --tail 10 指定函数  367da1071009  容器id    -f -t  日志详细信息

查看容器中进程信息

docker top 容器id 
docker inspect 容器id
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker inspect 4b41be4059af
[
    {
        "Id": "4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631",
        "Created": "2020-09-22T15:39:17.875462598Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 18956,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-09-22T15:39:18.400399969Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/hostname",
        "HostsPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/hosts",
        "LogPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631-json.log",
        "Name": "/unruffled_bose",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539-init/diff:/var/lib/docker/overlay2/ab9f55624201d767449eced5785bca433e2095842461e7d37e3f11ba39cca864/diff",
                "MergedDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/merged",
                "UpperDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/diff",
                "WorkDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "4b41be4059af",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200809",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "1b06863617871d6aa74e77adde20171108662f29e51206c4dbc707e06a704640",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/1b0686361787",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "b6f6b02f2b343f01420d07054ec6d45ba5908a66460b9ce1a8d23e4b785a0583",
            "Gateway": "172.18.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.18.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:12:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "794ee5813f2eb27980b3d6f9e0c2815a42b1bb761ab20ed13fa28193ca317043",
                    "EndpointID": "b6f6b02f2b343f01420d07054ec6d45ba5908a66460b9ce1a8d23e4b785a0583",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进去当前正在运行的容器

#我们通常
docker exec -it 4b41be4059af /bin/bash     #进入容器开启一个新的终端
docker attach 4b41be4059af   #进入容器打开正在执行的终端,不会开启一个新的进程

从容器内文件拷贝到主机上

docker cp  容器id:容器内路径  目的地主机路径

[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4b41be4059af        centos              "/bin/bash"         10 minutes ago      Up 10 minutes                           unruffled_bose
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker exec -it 4b41be4059af /bin/bash  进入容器
[root@4b41be4059af /]# cd home
[root@4b41be4059af home]# ls
[root@4b41be4059af home]# touch aa.java  #在文件内新建一个文件

docker cp 4b41be4059af:home/aa.java /home   #这个拷贝和容器是否运行毫无关系,只要文件在就可以拷贝

#拷贝是手动过程,可以后面可以通过卷挂载技术实现自动同步

安装nginx

[root@iZ2zedscyfod03wjkvxrk2Z /]# docker pull nginx  
#从dockerhub拉取镜像  
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -d --name nginx01 -p 3344:80 nginx   
# -d 后台运行 --name 别名  -p 暴露端口  宿主机端口:容器内端口

安装tomcat

#启动tomcat
[root@iZ2zedscyfod03wjkvxrk2Z bin]# docker run -it --name tomcat02  -p 3344:8080 tomcat:9.0
#默认的tomcat webapps里面没有东西访问会报404  藏在webapps.dist里面

#进入运行的容器 
[root@iZ2zedscyfod03wjkvxrk2Z bin]# docker exec -it tomcat01 /bin/bash

#复制webapps.dist里面的内容至webapps
root@a33f7621f5e7:/usr/local/tomcat# cp -r webapps.dist/* webapps

cp  命令
cp [options] source dest  或  cp [options] source... directory
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。

docker 镜像

union联合文件系统

docker commit

[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker commit -a="xiaoqu" -m="add test" e814d2ecd013 tomcatdemo:1.0
sha256:f04c7ee220fbca8c9e10654a772aa350e2fbd0ed3cfd13e9cf3856ae4b460794
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker iamges
docker: 'iamges' is not a docker command.
See 'docker --help'
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcatdemo          1.0                 f04c7ee220fb        12 seconds ago      652MB
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
e814d2ecd013        tomcat:9.0          "catalina.sh run"   3 days ago          Up 3 days           0.0.0.0:3344->8080/tcp   tomcat01
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker stop tomcat01    //停止之前的tomcat

[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker run -it -p 8080:8080 tomcatdemo:1.0   //启动好自己制作好的tomcat镜像

#ctrl+p+q 直接退出当前的镜像 ,该镜像后台运行
#tomcat 启动后 修改自己需要的配置,利用commit 提交当前自己制作好的tomcat,获得自己一个新的镜像,就好比以前学习虚拟机时候的快照,以后可以直接用自己设置好的镜像

数据卷挂载

[root@iZ2zedscyfod03wjkvxrk2Z home]# docker run -it --name centosdemo -v /home/test:/home centos /bin/bash     //主机的/home/test  与容器的/home 绑定
[root@ffb7a1cfce4f /]# cd home
[root@ffb7a1cfce4f home]# ls
[root@ffb7a1cfce4f home]# touch aa.txt    // 在容器里面创建aa.text文件
[root@ffb7a1cfce4f home]# ls
aa.txt
 
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker inspect centosdemo   // 需要在主机里面看,不能再容器里面看  查看启动的centos ,发现绑定成功
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
[root@iZ2zedscyfod03wjkvxrk2Z test]# cd /home/test   //查看主机里面的/home/test 里面存在了aa.text
[root@iZ2zedscyfod03wjkvxrk2Z test]# ls
aa.txt

#启动mysql
 -d 后台运行 -p  暴露端口 -v  数据卷挂载  -e  环境配置  (这是是配置mysql密码) --name  容器名字

[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -p 3310:3306 -v /home/docker/mysql/conf:/etc/mysql/conf.d -v /home/docker/mysql/date:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 --name mysqldemo mysql:5.7
a8c513412cd31dc3f9d74070870e92098094cba4a15c4d78cfaee56873f752c7
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
a8c513412cd3        mysql:5.7           "docker-entrypoint.s…"   7 seconds ago       Up 6 seconds        33060/tcp, 0.0.0.0:3310->3306/tcp   mysqldemo
[root@iZ2zedscyfod03wjkvxrk2Z test]# 

具名挂载个匿名挂载

-P 不指定端口 随机分配端口  (P为大写 。小写为指定端口)
#匿名挂载
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx01  -v /home/docker/nginx nginx
dec50170e0e7cc577c3dac389209b27fe6d70038a874995ba2a565fc2fb8b34c
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker volume ls     //查看所有卷的情况
DRIVER              VOLUME NAME
local               6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475      //匿名卷

#具名挂载   
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx  nginx
63a78371086f01540a2e9aa0816f6f055e5b5c7cebd796b2415da9bce6e6296f
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker volume ls
DRIVER              VOLUME NAME
local               6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475
local               juming
[root@iZ2zedscyfod03wjkvxrk2Z test]# cd /var/lib/docker
[root@iZ2zedscyfod03wjkvxrk2Z docker]# ls
builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
[root@iZ2zedscyfod03wjkvxrk2Z docker]# cd volumes/
[root@iZ2zedscyfod03wjkvxrk2Z volumes]# ls
56e638111a2d0ccf66fd8c68eb07ed1a6309ccba8b59ce1379b3d7edd5059f14  eba178b7c1634f4246f5a2b0dfa30bd6490c258eaa2961c8156a4b04b829b01c  metadata.db
6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475  juming
[root@iZ2zedscyfod03wjkvxrk2Z volumes]# cd juming
[root@iZ2zedscyfod03wjkvxrk2Z juming]# ls
_data
[root@iZ2zedscyfod03wjkvxrk2Z juming]# cd _data/
[root@iZ2zedscyfod03wjkvxrk2Z _data]# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

具名挂载、匿名挂载、指定路径挂载

ro readonly 只读     这个只能荣国宿主机来操作,容器内部是无法操作的
rw read write 可读可写
一旦这个设置了容器权限,容器对我们挂载出来的内容就有权限了
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx:ro  nginx
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx:rw  nginx

-v  容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载     注意前面没/
-v /宿主机路径:容器内路径 #指定路径挂载   注意前面有/

dockerFile

通过dockerFile构建centos镜像

dockerFile 就是用来构建镜像的构建文件,其实就是一个脚本,通过这个脚本可以生成一个镜像
dockerFile 命令都是大写开口

# 1.通过dockerFile构建centos镜像

[root@iZ2zedscyfod03wjkvxrk2Z juming]# cd /home/docker
[root@iZ2zedscyfod03wjkvxrk2Z docker]# mkdir volume_test
[root@iZ2zedscyfod03wjkvxrk2Z docker]# cd volume_test/
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# vim dockerFile1
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# cat dockerFile1 

FROM centos    # 以centos为基础
VOLUME ["volume01","volume02"]  #卷挂载
CMD echo "-----------end--------"  #控制台输出日志
CMD /bin/bash    

#-t 目标 最后由一个点,很重要  很重要 很重要
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker build  -f dockerFile1 -t xiaoqu/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in ff042ab12db0
Removing intermediate container ff042ab12db0
 ---> 6066076b7806
Step 3/4 : CMD echo "-----------end--------"
 ---> Running in 25d08fdfa901
Removing intermediate container 25d08fdfa901
 ---> 6020e32be8ff
Step 4/4 : CMD /bin/bash
 ---> Running in 9be099ebeb47
Removing intermediate container 9be099ebeb47
 ---> bd8bf39e8ea2
Successfully built bd8bf39e8ea2
Successfully tagged xiaoqu/centos:1.0
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker volume ls
DRIVER              VOLUME NAME
local               6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475
local               56e638111a2d0ccf66fd8c68eb07ed1a6309ccba8b59ce1379b3d7edd5059f14
local               eba178b7c1634f4246f5a2b0dfa30bd6490c258eaa2961c8156a4b04b829b01c
local               juming
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xiaoqu/centos       1.0                 bd8bf39e8ea2        37 seconds ago      215MB
tomcatdemo          1.0                 f04c7ee220fb        2 hours ago         652MB
tomcat              9.0                 f796d3d2c195        11 days ago         647MB
nginx               latest              7e4d58f0e5f3        2 weeks ago         133MB
mysql               5.7                 ef08065b0a30        2 weeks ago         448MB
centos              latest              0d120b6ccaa8        6 weeks ago         215MB

#启动自己制作的centos  发现自己volume01	volume02 生成镜像的时候自动挂载了,也就是数据卷目录
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xiaoqu/centos       1.0                 bd8bf39e8ea2        7 minutes ago       215MB
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker run -it bd8bf39e8ea2 /bin/bash
[root@1d62e657042e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02

启动自己制作的centos镜像

#如果启动的时候没有挂载卷,要手动挂载卷  启动的时候用-v挂载
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker run -it bd8bf39e8ea2 /bin/bash
[root@1d62e657042e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@1d62e657042e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@1d62e657042e /]# cd volume01
[root@1d62e657042e volume01]# touch aa.text   在 容器内的卷里面制作一个文件aa.text

[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1d62e657042e        bd8bf39e8ea2        "/bin/bash"         6 minutes ago       Up 6 minutes                            determined_darwin
#查看容器内卷挂载情况 卷挂载只写了容器内的名字,属于匿名挂载  默认挂载在 /var/lib/docker/volumes/里面
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker inspect 1d62e657042e
        "Mounts": [
            {
                "Type": "volume",
                "Name": "ccf5f1877eec56c45cb37b4e14c618db8731d384c6307ae552f2d5e3dbba1892",
                "Source": "/var/lib/docker/volumes/ccf5f1877eec56c45cb37b4e14c618db8731d384c6307ae552f2d5e3dbba1892/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "ba01d48dc1c874b03dc179394e652d0223905a8636878c87f143e961ce862b75",
                "Source": "/var/lib/docker/volumes/ba01d48dc1c874b03dc179394e652d0223905a8636878c87f143e961ce862b75/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ] 

–volumes-from centos01 容器共享 centos02 挂载在centos01里面 centos01 删除了 centos02里面不会删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值