栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker的学习

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker的学习

Docker 1.docker的安装
#1.卸载原有docker
yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
 #2.使用阿里云加速
yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#4.安装docker引擎 docker-ce社区版 docker-cc企业版
yum install docker-ce docker-ce-cli containerd.io

#5.启动docker 
systemctl start docker
#6.查看docker版本信息
docker version

#7.hello-world
docker run hello-world

#8.查看下载好的hello-world镜像
docker images

#9.卸载docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

2.配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ht4un1iv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.docker run 执行流程

4.docker底层原理

5.docker为什么比vm快?

1.docker有着比vm更少的抽象层。

2.docker使用的是宿主机的内核,vm需要Guest OS

Docker常用命令 帮助命令
docker version #docker版本命令
docker info #现实docker详细信息 系统信息 镜像和容器的数量
docker 命令 --help #万能命令 docker的帮助命令列表

官方命令文档地址:https://docs.docker.com/engine/reference/commandline/docker/

镜像命令 docker images 列出镜像
[root@i-jdglwroj /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

#解释
REPOSITORY #镜像的仓库源
TAG				 #镜像的标签
IMAGE ID 	 #镜像的ID
CREATED		 #镜像的创建时间
SIZE			 #镜像的大小

#可选项
-a, --all             #显示所有镜像
-f, --filter 					
-q, --quiet           #只显示ID
docker search 搜索镜像
[root@i-jdglwroj /]# docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12215     [OK]       
mariadb                          MariaDB Server is a high performing open sou…   4689      [OK]       
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   907                  [OK]

#可选项
--filter=STARS=3000 #过滤STARS大于3000的镜像
[root@i-jdglwroj /]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12215     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4689      [OK]
docker pull 拉取/下载镜像
[root@i-jdglwroj /]# docker pull mysql
Using default tag: latest #不加 tag 默认是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete  #分层下载 联合文件系统 **核心
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #镜像的真实地址

#等价
docker pull mysql
docker pull docker.io/library/mysql:latest

#指定版本下载
[root@i-jdglwroj /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists  #联合文件系统
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Extracting [===========>                                       ]  25.07MB/108.6MB
e2482e017e53: Download complete 
70deed891d42: Download complete  
docker rmi 删除镜像
#删除指定镜像
[root@i-jdglwroj /]# docker rmi -f mysql:5.7
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92

#删除所有镜像
[root@i-jdglwroj /]# docker rmi -f $(docker images -aq)

#删除多个镜像
[root@i-jdglwroj /]# docker rmi -f  
容器命令

说明:有了镜像才能创建容器,linux下创建一个linux容器,以centos为例。

docker pull centos
新建容器并运行
docker run [可选参数] image
#参数说明

--name='name1' 容器名字,mysql1、mysql2 用来区分容器
-d						 后台运行
-it						 使用交互方式运行,查看容器内容
-p						 指定容器端口  -p:8080:8080
		#四种方式
		-p ip:主机端口:容器端口
		-p 主机端口:容器端口
		-p 容器端口
		容器端口
-P(大写)			随机指定端口

#启动并进入容器
[root@i-jdglwroj /]# docker run -it centos /bin/bash
[root@7adc6a6e7394 /]# 

#查看容器内部的centos
[root@7adc6a6e7394 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#列出所有运行的容器
[root@i-jdglwroj /]# docker ps  列出所有运行的容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@i-jdglwroj /]# docker ps -a  列出所有运行过的容器
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
7adc6a6e7394   centos         "/bin/bash"   2 minutes ago   Exited (0) About a minute ago             laughing_keldysh
72e86329e42e   feb5d9fea6a5   "/hello"      4 hours ago     Exited (0) 4 hours ago                    pedantic_hofstadter
[root@i-jdglwroj /]# docker ps -a -n=1 列出最近运行/创建的容器
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
7adc6a6e7394   centos    "/bin/bash"   3 minutes ago   Exited (0) 2 minutes ago             laughing_keldysh
[root@i-jdglwroj /]# docker ps -aq 列出所有容器的id
7adc6a6e7394
72e86329e42e

#容器推出
exit #退出并停止容器
Ctrl+p+q #推出但不停止容器
删除容器
docker rm 容器id  #删除指定容器,不能删除正在运行的容器
docker rm -f 容器id #强制删除
[root@i-jdglwroj /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
c3711e75491a   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             cranky_faraday
[root@i-jdglwroj /]# docker rm c3711e75491a
Error response from daemon: You cannot remove a running container c3711e75491a47f304928a1cacdb5b852ef7a57680b6eb62db3e90cc07917a0b. Stop the container before attempting removal or force remove
docker rm $(docker ps -aq) #递归删除所有容器
docker rm -f $(docker ps -aq) #强制递归删除所有容器
docker ps -aq|xargs docker rm
docker ps -aq|xargs docker rm -f
启动和停止容器的操作
docker start 容器id		#启动容器
docker restart 容器id #重启容器
docker stop 容器id		#停止容器
docker kill 容器id		#强制停止容器
常用其他命令

后台启动命令

docker run -d 镜像id
[root@i-jdglwroj ~]# docker run -d centos
f2b8548de4958dfed3a61c3c04be2253af5628bf67893fe6813cbf9f3b942281
[root@i-jdglwroj ~]# docker ps #发现容器停止了,必须要有一个前台进程,docker发现没有就停止
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#容器启动后,docker发现没有提供服务,就会自动停止。

查看日志

docker logs --help
docker logs -f -t --tail 容器

#自己写一个shell
[root@i-jdglwroj ~]# docker run -d centos /bin/sh  -c 'while true;do echo yuhang;sleep 1;done'
1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17

[root@i-jdglwroj ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS        PORTS     NAMES
1cc8d946f665   centos    "/bin/sh -c 'while t…"   2 seconds ago   Up 1 second             sleepy_haslett

-ft 			 #format,显示日志
--tail 条数 #显示日志的条数

[root@i-jdglwroj ~]# docker logs -f -t --tail 10 1cc8d946f665
2022-03-07T02:39:18.210756727Z yuhang
2022-03-07T02:39:19.212859777Z yuhang
2022-03-07T02:39:20.215114243Z yuhang
2022-03-07T02:39:21.217281674Z yuhang

[root@i-jdglwroj ~]# docker logs -ft 1cc8d946f665
2022-03-07T02:37:32.978537482Z yuhang
2022-03-07T02:37:33.980579961Z yuhang
2022-03-07T02:37:34.982709737Z yuhang
2022-03-07T02:37:35.984936355Z yuhang
2022-03-07T02:37:36.987063211Z yuhang
2022-03-07T02:37:37.989179209Z yuhang
2022-03-07T02:37:38.991326669Z yuhang
2022-03-07T02:37:39.993444339Z yuhang
查看容器中进程信息
docker top 容器id

[root@i-jdglwroj ~]# docker top 1cc8d946f665
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                28513               28494               0                   10:37               ?                   00:00:00            /bin/sh -c while true;do echo yuhang;sleep 1;done
root                29307               28513               0                   10:44               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看容器中源数据
docker inspect 容器id

[root@i-jdglwroj ~]# docker inspect 1cc8d946f665
[
    {
        "Id": "1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17",
        "Created": "2022-03-07T02:37:32.682440423Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo yuhang;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 28513,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-03-07T02:37:32.98048525Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/hostname",
        "HostsPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/hosts",
        "LogPath": "/var/lib/docker/containers/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17/1cc8d946f66521d65354e53741703932537e859fb149fdf80ca0e69747e31b17-json.log",
        "Name": "/sleepy_haslett",
        "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,
            "CgroupnsMode": "host",
            "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/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d-init/diff:/var/lib/docker/overlay2/dd9fd4a5cb20ac52d8c7795219b220e5e18f5c1da5b5c69b0abdd868d3f1aa10/diff",
                "MergedDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/merged",
                "UpperDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/diff",
                "WorkDir": "/var/lib/docker/overlay2/20e05c97d72413548be3118486e45e5ea17c585672eca5566fd9ee25313de69d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "1cc8d946f665",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo yuhang;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "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": "b5f9b000afcd745a5ac8c7d469784bc9c4addc59fc59b4b6f7a6df6ff01e1da0",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/b5f9b000afcd",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "de32a76226846fe75820d9ba3a53d1e71bec8d0fd0b5ae0fd2705c8d00775970",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "325ec8758c2439d94f97a6d7b679ec69f02a31444be1a203dbb05c3dd91b6403",
                    "EndpointID": "de32a76226846fe75820d9ba3a53d1e71bec8d0fd0b5ae0fd2705c8d00775970",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前运行的容器
docker exec -it 容器id /bin/bash
[root@i-jdglwroj ~]# docker exec -it 1cc8d946f665 /bin/bash 进入容器并开启一个终端
[root@1cc8d946f665 /]# exit

docker attach 容器id
[root@i-jdglwroj ~]# docker attach 1cc8d946f665 进入容器当前执行的终端
yuhang
yuhang
拷贝容器内部的文件到host主机
docker cp 容器id:文件地址 目标本地地址
[root@i-jdglwroj home]# docker cp af8c3213c885:/home/yuhang.test /home
练习

docker安装nginx

docker search nginx
docker pull nginx #下载nginx镜像
[root@i-jdglwroj home]# docker run -d --name='nginx1' -p 3344:80 nginx
5812f00054b73562ca5b364885f9c7791936fd0cb2e3d230fd87f6ea84bc738f
[root@i-jdglwroj home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
5812f00054b7   nginx     "/docker-entrypoint.…"   2 seconds ago   Up 2 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx1
[root@i-jdglwroj home]# curl localhost:3344



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

#查看nginx信息 root@5812f00054b7:/etc# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@5812f00054b7:/etc# cd /etc/nginx/ root@5812f00054b7:/etc/nginx# ls conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
外网访问

端口暴露的概念

docker 安装tomcat

docker run -it --rm tomcat:9.0 #官方方式 用完即删

docker pull tomcat #下载最新版
docker run -d -p 3355:8080 --name tom1 tomcat
#问题 1、linux命令少了 2、没有webapps 阿里云默认最小的镜像 不必要的都删了
#保证最小的体积 
docker exec -it tom1 /bin/bash
cp webapps.dist/* webapps #拷贝webapps.dist/*数据到默认webapps

测试访问:3355*

部署es+kibana

elasticsearch 非常耗内存 #需要4g内存
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch #限制内存

#查看docker cpu状态
docker stats 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS

[root@i-jdglwroj ~]# curl localhost:9200
{
  "name" : "uyS9KAa",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "kZx9XT0PSd68GtX6i5Om8g",
  "version" : {
    "number" : "5.6.12",
    "build_hash" : "cfe3d9f",
    "build_date" : "2018-09-10T20:12:43.732Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

ES+Kibana网络原理

可视化

portainer

docker run -d -p 8088:9000 
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

测试访问

主页

Rancher(CI/CD)

镜像讲解 镜像是什么?

UnionFS(联合文件系统)

Docker镜像加载原理

镜像分层

commit镜像

docker commit 提交容器成为一个新的副本

# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 新镜像名:[TAG]

#测试
1、run 一个tomcat容器 自己修改默认配置

2、通过commit命令构建一个修改好的镜像
[root@i-jdglwroj ~]# docker commit -a="yuhang" -m="add app config" 4a54cf558d24 tomcat02
sha256:f8ac4bf61917ba42fc9a1ca847a2f9259cae7f7221ecd7c5d49c6393bb1d368d
[root@i-jdglwroj ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
tomcat02              latest    f8ac4bf61917   2 seconds ago   684MB
nginx                 latest    605c77e624dd   2 months ago    141MB
tomcat                latest    fb5657adc892   2 months ago    680MB
centos                latest    5d0da3dc9764   5 months ago    231MB
portainer/portainer   latest    580c0e4e98b0   11 months ago   79.1MB
elasticsearch         latest    5acf0e8da90b   3 years ago     486MB
以上是入门 容器数据卷 什么是容器数据卷

需求:数据持久化、同步

#mysql可以存储在本地

使用数据卷
#使用命令来挂载 -v
docker run -it -v 主机目录:容器内部
[root@i-jdglwroj ~]# docker run -it -v /home/ceshi:/home/ centos /bin/bash

#测试挂载是否成功
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",#主机地址
                "Destination": "/home",#容器内地址
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        
#继承挂载
docker run -it --name docker02 --volumes-from docker01 镜像名:tag
#即使一个容器被删除 另一个容器里面挂载过的数据还在

结论

容器配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止

但是一旦持久化到本地,是不会被删除的。

测试

实战:安装mysql

docker pull mysql
[root@i-jdglwroj ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Downloading [=====================================>             ]   20.1MB/27.15MB
93619dbc5b36: Download complete 
99da31dd6142: Download complete 
626033c43d70: Download complete 
37d5d7efb64e: Download complete 
ac563158d721: Download complete 
d2ba16033dad: Download complete 
688ba7d5c01a: Download complete 
00e060b6d11d: Downloading [=====>                                             ]  11.55MB/105.2MB
1c04857f594f: Download complete 
4d7cfa90e6ea: Download complete 
e0431212d27d: Download complete 

#启动mysql
docker run -d -p 3310:3306 --name mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yuhang0829 mysql

#测试外网连接成功
#AllowPublicKeyRetrieval设置为true

#完全删除容器
docker rm -f mysql01

#数据还存在
[root@i-jdglwroj ~]# cd /home/mysql/
[root@i-jdglwroj mysql]# cd data/
[root@i-jdglwroj data]# ls
auto.cnf       binlog.000003  binlog.000006  ca.pem           #ib_16384_0.dblwr  ibdata1      ibtmp1        mysql.ibd           public_key.pem   Students  undo_002
binlog.000001  binlog.000004  binlog.index   client-cert.pem  #ib_16384_1.dblwr  ib_logfile0  #innodb_temp  performance_schema  server-cert.pem  sys
binlog.000002  binlog.000005  ca-key.pem     client-key.pem   ib_buffer_pool     ib_logfile1  mysql         private_key.pem     server-key.pem   undo_001

#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有的volume情况
[root@i-jdglwroj data]# docker volume ls
DRIVER    VOLUME NAME
local     6a7efd6481a52c8d38f677e5e48b537a5698d0781027bb38d1259935386f4a43
#因为只写了容器内的路径

#具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx01 -v juming-volume:/etc/nginx nginx

[root@i-jdglwroj data]# docker volume ls
DRIVER    VOLUME NAME
local     juming-volume

[root@i-jdglwroj data]# docker volume inspect juming-volume
[
    {
        "CreatedAt": "2022-03-09T00:24:11+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-volume/_data",
        "Name": "juming-volume",
        "Options": null,
        "Scope": "local"
    }
]

拓展

# 通过 -v 容器内路径:ro/rw 改变读写权限
ro readonly #只读
rw readwrite#可读可写

#一旦设置了容器权限,容器对挂载出来的内容就有了限定
#ro权限只能通过宿主机来读写,容器内部不能操作
初识dockerfile

dockerfile是用来构建镜像的文件!命令脚本!

镜像是一层一层的,这个脚本就是一块一块的!

#创建一个dockerfile文件
#文件中内容
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"

CMD /bin/bash

#构建一个image
[root@i-jdglwroj build-images]# docker build -f dockerfile01 -t yuhang/centos .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 9e58600b94c5
Removing intermediate container 9e58600b94c5
 ---> a808511041c3
Step 3/4 : CMD echo "----end----"
 ---> Running in 1b401c59f87e
Removing intermediate container 1b401c59f87e
 ---> 2b95752306c4
Step 4/4 : CMD /bin/bash
 ---> Running in 8d7ea12bfd6e
Removing intermediate container 8d7ea12bfd6e
 ---> 8a554f0179aa
Successfully built 8a554f0179aa
Successfully tagged yuhang/centos:latest

#查看是否build成功
[root@i-jdglwroj build-images]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
yuhang/centos         latest    8a554f0179aa   48 seconds ago   231MB

#run起来
[root@i-jdglwroj ~]# docker run -it --name centos01 yuhang/centos
[root@ee3c197e03bd /]# 
[root@ee3c197e03bd /]# [root@i-jdglwroj ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS     NAMES
ee3c197e03bd   yuhang/centos   "/bin/sh -c /bin/bash"   8 seconds ago   Up 8 seconds             centos01
Dockerfile

dockerfile是用来构建docker镜像的文件,命令参数脚本。

步骤:

1、构建一个dockerfile文件。

2、docker build 构建成为镜像。

3、docker run 运行我们的镜像容器。

4、docker commit 提交我们的镜像。

5、docker push 上传/发布我们的镜像。

Dockerfile的构建过程

基础知识:

1、每个保留关键字(指令)都必须是大写字母

2、执行从上到下顺序执行

3、#表示注释

4、每一个指令都会创建提交一个新的镜像,并提交!

dockerfile是面向开发的,以后发布项目,做镜像,就需要编写dockerfile。

Dockerfile的指令

以前我们使用别人的镜像,现在练习自己构建镜像。

FROM #基础镜像 centos
MAINTAINER #镜像维护者信息/构建者 姓名+邮箱
RUN #docker镜像构建时候需要运行的命令
ADD #tomcat的镜像,这个tomcat的压缩包,就是添加内容。
WORKDIR #当前这个镜像起来之后的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动时候要运行的命令 CMD echo,只有最后一个会生效,可被替代。
ENTRYPOINT #指定这个容器启动时候要运行的命令可以追加命令
ONBUILD #当构建一个被继承 DOckerfile 这个时候就会运行 ONBUILD的指令。
COPY #类似ADD,将我们的文件 拷贝到镜像中
ENV #构建的时候设置环境变量
实战测试

Docker Hub 中 99%的镜像都是从基础镜像过来的 FROM scratch,然后配置需要的软件和配置进行构建。

自己构建一个:

#1.编写Dockerfile
FROM centos

MAINTAINER yuhang

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end------"
CMD /bin/bash

#2.使用这个文件构建镜像
docker build -f dockerfile01 -t 镜像名:[tag] .

Successfully built 98922b593d9b
Successfully tagged yuhang-centos:1.0 
发现我们的镜像构建成功了!!!

docker history 镜像名 #查看我们的镜像的历史信息

CMD和ENTRYPOINT的区别
CMD #指定这个容器启动时候要运行的命令 CMD echo,只有最后一个会生效,可被替代。
ENTRYPOINT #指定这个容器启动时候要运行的命令可以追加命令

测试CMD

touch dockerfile-cmdtest
vim dockerfile-cmdtest

FROM centos:7

CMD ["ls","-a"]

#因为CMD命令是替换的 所以 -l并不是一个完整的命令
[root@i-jdglwroj build-images]# docker run -it cmdtest -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

#必须要加一个完整的命令

[root@i-jdglwroj build-images]# docker run -it cmdtest ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr

测试entrypoint

[root@i-jdglwroj build-images]# touch dockerfile-entrypoint

[root@i-jdglwroj build-images]# vim dockerfile-entrypoint 

FROM centos:7

ENTRYPOINT ["ls","-a"]

[root@i-jdglwroj build-images]# docker build -f dockerfile-entrypoint -t entrypoint .

[root@i-jdglwroj build-images]# docker run -it entrypoint
.   .dockerenv         bin  etc   lib    media  opt   root  sbin  sys  usr
..  anaconda-post.log  dev  home  lib64  mnt    proc  run   srv   tmp  var

[root@i-jdglwroj build-images]# docker run -it entrypoint -l
total 12
drwxr-xr-x   1 root root     6 Mar 10 03:15 .
drwxr-xr-x   1 root root     6 Mar 10 03:15 ..
-rwxr-xr-x   1 root root     0 Mar 10 03:15 .dockerenv
-rw-r--r--   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x   5 root root   360 Mar 10 03:15 dev
drwxr-xr-x   1 root root    66 Mar 10 03:15 etc
drwxr-xr-x   2 root root     6 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x   2 root root     6 Apr 11  2018 media
drwxr-xr-x   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x 107 root root     0 Mar 10 03:15 proc
dr-xr-x---   2 root root   114 Nov 13  2020 root
drwxr-xr-x  11 root root   148 Nov 13  2020 run
写一个centos 集成tomcat

docker网络原理

docker中所有的网络接口都是虚拟的,虚拟的转发效率很高。

–link
 
自定义网络 
自己创建一个网络
driver-bridge
subnet-192.168.0.0
gateway-192.168.0.1

[root@i-jdglwroj ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号