Docker入门

本人环境搭建在内网树莓派4b上,使用的linux发行版为树莓派Ubuntu 21.04 server版本

一些镜像需要根据自己的处理器架构去修改!!!


安装Docker

sudo apt install docker.io

查看安装的docker是否成功

root@ubuntu:/home/ubuntu# docker version
Client:Version:           20.10.7API version:       1.41Go version:        go1.13.8Git commit:        20.10.7-0ubuntu5~21.04.2Built:             Mon Nov  1 00:21:30 2021OS/Arch:           linux/arm64Context:           defaultExperimental:      trueServer:Engine:Version:          20.10.7API version:      1.41 (minimum version 1.12)Go version:       go1.13.8Git commit:       20.10.7-0ubuntu5~21.04.2Built:            Tue Oct 19 01:00:27 2021OS/Arch:          linux/arm64Experimental:     falsecontainerd:Version:          1.5.2-0ubuntu1~21.04.3GitCommit:        runc:Version:          1.0.0~rc95-0ubuntu1~21.04.2GitCommit:        docker-init:Version:          0.19.0GitCommit:

Docker HelloWorld

使用pull命令吧hello-world镜像pull下来

使用docker pull --help得到pull的使用文档可知

pull 用法Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]

sudo docker pull hello-world:latest      #latest可以不加,默认会pull最新版

使用run命令吧hello-world跑起来

sudo docker run hello-world
root@ubuntu:/home/ubuntu# sudo docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(arm64v8)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

可以看出我们的docker安装成功,测试hello-world也成功了

当然,我们可以不用pull命令,直接使用run命令来运行一个镜像。docker在检索宿主机中没有hello-world镜像后会去官方镜像仓库pull下来再运行

sudo  docker run hello-world:latest

Docker run 的底层原理图


Docker命令

镜像命令

docker images 查看所有本地主机上的镜像

root@ubuntu:/# sudo docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mysql                 oracle    3ffe8c471196   3 days ago      485MB
nginx                 latest    eeb9db34b331   2 months ago    134MB
tomcat                9         e0c31b8f374c   2 months ago    668MB
elasticsearch         7.16.2    e082d8ac7e5e   2 months ago    634MB
hello-world           latest    18e5af790473   5 months ago    9.14kB
portainer/portainer   latest    ce24b0500fe9   11 months ago   68.4MB

REPOSITORY 镜像的仓库

TAG 镜像的标签/版本号

IMAGE ID 镜像的ID

CREATED 镜像的创建时间

SIZE 镜像的大小


docker search 查找镜像

比如我们需要查找mysql镜像

sudo docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12191     [OK]
mariadb                          MariaDB Server is a high performing open sou…   4683      [OK]
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   907                  [OK]
percona                          Percona Server is a fork of the MySQL relati…   570       [OK]
phpmyadmin                       phpMyAdmin - A web interface for MySQL and M…   461       [OK]
mysql/mysql-cluster              Experimental MySQL Cluster Docker images. Cr…   93
centos/mysql-57-centos7          MySQL 5.7 SQL database server                   92
bitnami/mysql                    Bitnami MySQL Docker Image                      64                   [OK]
circleci/mysql                   MySQL is a widely used, open-source relation…   25
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   24
mysql/mysql-router               MySQL Router provides transparent routing be…   23
centos/mysql-56-centos7          MySQL 5.6 SQL database server                   21
arey/mysql-client                Run a MySQL client from a docker container      20                   [OK]
google/mysql                     MySQL server for Google Compute Engine          19                   [OK]
mysqlboy/mydumper                mydumper for mysql logcial backups              3
mysqlboy/docker-mydumper         docker-mydumper containerizes MySQL logical …   3
bitnami/mysqld-exporter                                                          2
ibmcom/mysql-s390x               Docker image for mysql-s390x                    1
mysqlboy/percona-server          Percona-Server a MySQL Fork with enhancement…   1                    [OK]
mysqlboy/elasticsearch                                                           0
mysqleatmydata/mysql-eatmydata                                                   0
mysql/mysql-operator             MySQL Operator for Kubernetes                   0
mirantis/mysql                                                                   0
cimg/mysql                                                                       0
ibmcom/tidb-ppc64le              TiDB is a distributed NewSQL database compat…   0

我们会发现符合名称为mysql的镜像太多了,可以使用STARS数量来过滤一部分镜像

docker search mysql --filter=STARS=3000NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDmysql     MySQL is a widely used, open-source relation…   12191     [OK]       mariadb   MariaDB Server is a high performing open sou…   4683      [OK]

也可以使用OFFICIAL参数来查找出全部的官方镜像 --filter “is-official=true”

docker search mysql --filter "is-official=true"NAME         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDmysql        MySQL is a widely used, open-source relation…   12191     [OK]       mariadb      MariaDB Server is a high performing open sou…   4683      [OK]       percona      Percona Server is a fork of the MySQL relati…   570       [OK]       phpmyadmin   phpMyAdmin - A web interface for MySQL and M…   461       [OK]

当然,使用命令行search查找镜像不如去官方网站去查找(http://hub.docker.com),上面有不同的镜像和版本的介绍和帮助文档,在网站中找到合适的镜像再pull到本地是最好的


docker pull 下载镜像

这个命令在我们运行hello-world镜像时候说过了

我们再次pull一个mysql来使用(注意问题,我的架构是树莓派的armv8架构,直接使用pull mysql下来的是x86/64架构的镜像,不能运行)

我们到官方镜像网站去查询mysql镜像https://hub.docker.com/

排名最前面的mysql我们点进去查看,发现能找到的版本都不支持armv8架构

这时我们去查看下官方文档

能看到有支持armv8架构的mysql 的超链接,点过去

找到了一个最新版本为mysql:oracle版本的mysql,支持的架构中有我们树莓派4b的架构

# docker pull mysql# Using default tag: latest           # 如果不写tag,默认就是latest 我们这里不能使用正常版本的mysql,必须修改后缀为oracleroot@ubuntu:/# sudo docker pull mysql:oracleoracle: Pulling from library/mysql63ea605e0f83: Pull complete 8682e4307360: Pull complete 8811e76642f8: Pull complete 04ed278df250: Pull complete 2c93b01f7b04: Pull complete 13a0806a1841: Pull complete dc52d9a5079e: Pull complete 4efb38734b87: Pull complete 98e25dd4e90f: Pull complete 142127aec3b2: Pull complete Digest: sha256:c290ae4835977163f5e64f0097ca8e3e68b7bfe8e1be6eaf868cd2c784f49a61Status: Downloaded newer image for mysql:oracledocker.io/library/mysql:oracle

docker rmi 删除镜像

docker rmi -f [镜像id]                        # 删除指定镜像docker rmi -f [镜像id1] [镜像id2] [镜像id3]    # 删除多个镜像docker rmi -f $(docker images -aq)            # 删除所有镜像

容器命令

容器是在镜像基础上的,有镜像了才能有对应的容器。镜像和容器是层级关系,镜像生成容器,我们操作的层级是容器


我们pull一个centos镜像

sudo docker pull centos

docker run 运行命令

docker run [可选参数] 镜像名 [命令] [文件扩展名]可选参数:-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;-d: 后台运行容器,并返回容器ID;-i: 以交互模式运行容器,通常与 -t 同时使用;-P: 随机端口映射,容器内部端口随机映射到主机的端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;--name="nginx-lb": 为容器指定一个名称;--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;-h "mars": 指定容器的hostname;-e username="ritchie": 设置环境变量;--env-file=[]: 从指定文件读入环境变量;--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;-m :设置容器使用内存最大值;--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;--link=[]: 添加链接到另一个容器;--expose=[]: 开放一个端口或一组端口;--volume , -v: 绑定一个卷

run刚刚pull 的centos镜像

root@ubuntu:/# docker run -it centos /bin/bash[root@1c10815ca35f /]#                           #这是已经进入了centos容器内部了[root@1c10815ca35f /]# exit                     #使用exit退出容器,docker检测到容器无操作就自动关闭了(没有守护进程)exitroot@ubuntu:/#

docker ps 列出所有运行中容器

docker ps [可选参数]-a :显示所有的容器,包括未运行的。-f :根据条件过滤显示的内容。--format :指定返回值的模板文件。-l :显示最近创建的容器。-n :列出最近创建的n个容器。--no-trunc :不截断输出。-q :静默模式,只显示容器编号。-s :显示总的文件大小。
root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMESroot@ubuntu:/# docker ps -aCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   12 minutes ago   Exited (0) 10 minutes ago             cranky_kalam161fe37342fd   centos    "/bin/bash"   12 minutes ago   Exited (0) 12 minutes ago             stoic_antonelliroot@ubuntu:/# docker ps -qa1c10815ca35f161fe37342fd

docker退出容器

exit            # 直接退出容器并关闭Ctrl + P + Q    # 容器不关闭退出

docker启动和停止容器

docker start 容器id           # 启动容器docker restart 容器id         # 重启容器docker stop 容器id            # 停止当前正在运行的容器docker kill 容器id            # 强制停止当前的容器

docker删除容器

docker rm -f 容器id                  # 删除指定容器docker rm -f $(docker ps -aq)        # 删除所有容器docker rm $(docker ps -aq)            # 删除所有关闭的容器

docker查看运行中容器进程

root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   30 minutes ago   Up 55 seconds             cranky_kalamroot@ubuntu:/# docker top 1c10815ca35fUID                 PID                 PPID                C                   STIME               TTY                 TIME                CMDroot                17336               17314               0                   08:56               pts/0               00:00:00            /bin/bashroot                17511               17314               0                   08:56               ?                   00:00:00            /bin/bash

docker查看镜像的元数据

root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   32 minutes ago   Up 3 minutes             cranky_kalamroot@ubuntu:/# docker inspect 1c10815ca35f[    {        "Id": "1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931",        "Created": "2022-03-02T08:26:47.282673896Z",        "Path": "/bin/bash",        "Args": [],        "State": {            "Status": "running",            "Running": true,            "Paused": false,            "Restarting": false,            "OOMKilled": false,            "Dead": false,            "Pid": 17336,            "ExitCode": 0,            "Error": "",            "StartedAt": "2022-03-02T08:56:05.630541344Z",            "FinishedAt": "2022-03-02T08:28:07.817797534Z"        },        "Image": "sha256:e6a0117ec169eda93dc5ca978c6ac87580e36765a66097a6bfb6639a3bd4038a",        "ResolvConfPath": "/var/lib/docker/containers/1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931/resolv.conf",        "HostnamePath": "/var/lib/docker/containers/1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931/hostname",        "HostsPath": "/var/lib/docker/containers/1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931/hosts",        "LogPath": "/var/lib/docker/containers/1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931/1c10815ca35f50567560b59fc0c38d4bbb3df5f0a59854bf8e2f22e9998f2931-json.log",        "Name": "/cranky_kalam",        "RestartCount": 0,        "Driver": "overlay2",        "Platform": "linux",        "MountLabel": "",        "ProcessLabel": "",        "AppArmorProfile": "docker-default",        "ExecIDs": [            "059c2548da082abf1c704da36f58549ad62575d4bcb2bef71845f435aa2af7ca"        ],        "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/4b1dae9c8c66a328d74b69903713f34f5c707c2580b2a2c83183a9d2f1daedd3-init/diff:/var/lib/docker/overlay2/6f5717bc400dbb8602596589eaac6e1d38a1d67fbb1fb17f92e847c33825e46b/diff",                "MergedDir": "/var/lib/docker/overlay2/4b1dae9c8c66a328d74b69903713f34f5c707c2580b2a2c83183a9d2f1daedd3/merged",                "UpperDir": "/var/lib/docker/overlay2/4b1dae9c8c66a328d74b69903713f34f5c707c2580b2a2c83183a9d2f1daedd3/diff",                "WorkDir": "/var/lib/docker/overlay2/4b1dae9c8c66a328d74b69903713f34f5c707c2580b2a2c83183a9d2f1daedd3/work"            },            "Name": "overlay2"        },        "Mounts": [],        "Config": {            "Hostname": "1c10815ca35f",            "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": "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": "b4beed58c56a29585f70645cb29efd70e66086e9c4b0206b82a40a689f731f88",            "HairpinMode": false,            "LinkLocalIPv6Address": "",            "LinkLocalIPv6PrefixLen": 0,            "Ports": {},            "SandboxKey": "/var/run/docker/netns/b4beed58c56a",            "SecondaryIPAddresses": null,            "SecondaryIPv6Addresses": null,            "EndpointID": "b83a60b311af3bc3f453594697dc64676cd94cb45a15332067b68337eed8c634",            "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": "9fafde59e4478c4d3687835f16c80ed6143aee5f46037b7b7dfbd712ff27e254",                    "EndpointID": "b83a60b311af3bc3f453594697dc64676cd94cb45a15332067b68337eed8c634",                    "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进入正在运行的容器

docker exec -it 容器id /bin/bash

root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   34 minutes ago   Up 4 minutes             cranky_kalamroot@ubuntu:/# docker exec -it 1c10815ca35f /bin/bash[root@1c10815ca35f /]# lsbin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var[root@1c10815ca35f /]#

docker attach 容器id

root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   35 minutes ago   Up 6 minutes             cranky_kalamroot@ubuntu:/# docker attach 1c10815ca35f[root@1c10815ca35f /]#

这两种方法区别:

docker exec # 进入容器后开启一个新的终端,可以在里面操作*

docker attach # 进入容器正在执行的终端,不会启动新的进程

docker从容器中拷贝文件到主机

docker cp 容器id:容器内路径 容器外路径

root@ubuntu:/# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES1c10815ca35f   centos    "/bin/bash"   39 minutes ago   Up 2 minutes             cranky_kalamroot@ubuntu:/# docker exec -it 1c10815ca35f /bin/bash[root@1c10815ca35f /]# lsbin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var[root@1c10815ca35f /]# echo 'helloworld'>ceshi.txt[root@1c10815ca35f /]# lsbin  ceshi.txt  dev  etc  home  lib  lib64  lost+found media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@ubuntu:/# docker cp 1c10815ca35f:/ceshi.txt /homeroot@ubuntu:/# cd /homeroot@ubuntu:/home# lsceshi.txt  mysql  ubuntu  wwwroot@ubuntu:/home#

Docker部署软件

Docker部署nginx

root@ubuntu:/home/ubuntu# docker imagesREPOSITORY            TAG       IMAGE ID       CREATED         SIZEmysql                 oracle    3ffe8c471196   3 days ago      485MBnginx                 latest    eeb9db34b331   2 months ago    134MBtomcat                9         e0c31b8f374c   2 months ago    668MBelasticsearch         7.16.2    e082d8ac7e5e   2 months ago    634MBhello-world           latest    18e5af790473   5 months ago    9.14kBcentos                latest    e6a0117ec169   5 months ago    272MBportainer/portainer   latest    ce24b0500fe9   11 months ago   68.4MB

可以看到我们已经有nginx的镜像了,我们可以直接启动

docker run -d --name nginx01 -p 3344:80 nginx  # 后台方式启动启动nginx镜像,名称为nginx01,吧nginx暴露出的80端口映射到宿主机的3344端口上启动root@ubuntu:/home/ubuntu# docker run -d --name nginx01 -p 3344:80 nginx258ae4f6f9d8c76e4b37b9c8e36251084feeb66aa2c424d735fc9fa6308b8b56root@ubuntu:/home/ubuntu# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES258ae4f6f9d8   nginx     "/docker-entrypoint.…"   37 seconds ago   Up 36 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01

开放3344端口后内网访问测试

nginx部署成功!


Docker部署tomcat

root@ubuntu:/home/ubuntu# docker imagesREPOSITORY            TAG       IMAGE ID       CREATED         SIZEmysql                 oracle    3ffe8c471196   3 days ago      485MBnginx                 latest    eeb9db34b331   2 months ago    134MBtomcat                9         e0c31b8f374c   2 months ago    668MBelasticsearch         7.16.2    e082d8ac7e5e   2 months ago    634MBhello-world           latest    18e5af790473   5 months ago    9.14kBcentos                latest    e6a0117ec169   5 months ago    272MBportainer/portainer   latest    ce24b0500fe9   11 months ago   68.4MB

我们本地已经有了tomcat:9的镜像了,可以直接运行

docker run -d -p 3344:8080 --name tomcat01 tomcat:9  #后台运行tomcat,吧8080端口映射到3344端口,名称设置为tomcat01

docker: Error response from daemon: driver failed programming external connectivity on endpoint tomcat01 (d7acc0975879aa737958f8d12e7c58d144abe1a91ed23c4d65c2c10e6511ec29): Bind for 0.0.0.0:3344 failed: port is already allocated.

报错了,根据信息可以看得出,我们nginx的端口和tomcat设置的端口重复了,我们把nginx的容器关闭重新开启tomcat

root@ubuntu:/home/ubuntu# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES258ae4f6f9d8   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01root@ubuntu:/home/ubuntu# docker stop 258ae4f6f9d8258ae4f6f9d8

刚刚运行的启动tomcat虽然报错,但是容器已经生成了;我们直接运行tomcat01容器就可以了

root@ubuntu:/home/ubuntu# docker ps -aCONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS                     PORTS     NAMES656b1452509f   tomcat:9   "catalina.sh run"        3 minutes ago   Created                              tomcat01258ae4f6f9d8   nginx      "/docker-entrypoint.…"   8 minutes ago   Exited (0) 2 minutes ago             nginx01root@ubuntu:/home/ubuntu# docker start 656b1452509f656b1452509f

访问之后我们发现tomcat报错404

我们进入容器查看下可以发现webapps目录是空的,但是webapps.dist中有我们需要的文件

root@ubuntu:/home/ubuntu# docker psCONTAINER ID   IMAGE      COMMAND             CREATED         STATUS              PORTS                                       NAMES656b1452509f   tomcat:9   "catalina.sh run"   5 minutes ago   Up About a minute   0.0.0.0:3344->8080/tcp, :::3344->8080/tcp   tomcat01root@ubuntu:/home/ubuntu# docker exec -it 656b1452509f /bin/bashroot@656b1452509f:/usr/local/tomcat# lsBUILDING.txt    LICENSE  README.md  RUNNING.txt  conf  logs        temp     webapps.distCONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin         lib   native-jni-lib  webapps  workroot@656b1452509f:/usr/local/tomcat# cd webappsroot@656b1452509f:/usr/local/tomcat/webapps# lsroot@656b1452509f:/usr/local/tomcat/webapps# cd ..root@656b1452509f:/usr/local/tomcat# cd webapps.dist/root@656b1452509f:/usr/local/tomcat/webapps.dist# lsROOT  docs  examples  host-manager  manager

我们把webapps.dist中的文件复制到webapps目录中

root@656b1452509f:/usr/local/tomcat# lsBUILDING.txt  LICENSE  README.md  RUNNING.txt  conf  logs        temp     webapps.distCONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin         lib   native-jni-lib  webapps  workroot@656b1452509f:/usr/local/tomcat# cp -r webapps.dist/* webappsroot@656b1452509f:/usr/local/tomcat# cd webappsroot@656b1452509f:/usr/local/tomcat/webapps# lsROOT  docs  examples  host-manager  manager

刷新网站查看,成功进入tomcat

tomcat部署成功!


Dcoekr部署Mysql

我们的armv8架构需要不同的mysql(之前已经下载好了)

mysql oracle 3ffe8c471196 3 days ago 485MB

root@ubuntu:/# docker run -d -p 3344:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 --name mysql01 mysql:oracle# 后台运行,3306端口映射到3344端口,挂载了两个目录,分别是数据和配置目录,使用-e配置了mysql的root密码并且设置名字为mysql01a6fb9bef820e5e8905214f80cc00e3aa96e31f13db54d5bff0d6fd7aadbd08ef

启动起来后我们使用Navicat连接试试

mysql部署成功!


Docker可视化-portainer

root@ubuntu:/home/ubuntu# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer# 后台运行,9000端口映射到宿主机的8088端口,重新启动策略为总是,挂载卷为/var/run/docker.sock到宿主机的/var/run/docker.sock,privileged为true管理员95f66d93cde791523c7a83464ab6810a47e01384abc90814d43a01976114249c

具体使用方法请百度


commit镜像

root@ubuntu:/var/run# docker psCONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMESroot@ubuntu:/var/run# docker ps -aCONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS                        PORTS     NAMES656b1452509f   tomcat:9   "catalina.sh run"        37 minutes ago   Exited (143) 19 minutes ago             tomcat01258ae4f6f9d8   nginx      "/docker-entrypoint.…"   42 minutes ago   Exited (0) 36 minutes ago               nginx01root@ubuntu:/var/run# docker commit -m="这是修改好的tomcat9" -a="Baicha" 656b1452509f tomcat9:0.1sha256:26722a2b241b1bdd05b3c389d2a26d1efdf15908da8f71428fdc053b5cbfe144root@ubuntu:/var/run# docker imagesREPOSITORY            TAG       IMAGE ID       CREATED          SIZEtomcat9               0.1       26722a2b241b   11 seconds ago   673MBmysql                 oracle    3ffe8c471196   3 days ago       485MBnginx                 latest    eeb9db34b331   2 months ago     134MBtomcat                9         e0c31b8f374c   2 months ago     668MBelasticsearch         7.16.2    e082d8ac7e5e   2 months ago     634MBhello-world           latest    18e5af790473   5 months ago     9.14kBcentos                latest    e6a0117ec169   5 months ago     272MBportainer/portainer   latest    ce24b0500fe9   11 months ago    68.4MB

我们把我们刚刚修改好的tomcat9容器commit成了一个镜像,后面就可以直接使用这个镜像来创建容器而不用修改webapps文件夹了


容器数据卷

如果数据都在容器中,那么我们吧容器删除,容器中的数据就会丢失!

容器之间可以有一个数据共享技术!Docker容器中产生的数据,同步到本地!

这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux目录上面!

**总结: **容器的持久化和同步操作!容器间数据也是可以共享的!

使用方法一:指定路径挂载 run -v来挂载

docker run -it -v /home/ceshi:/home centos /bin/bash     #centos镜像创建容器时吧/home目录挂载到主机/home/ceshi上

使用方法二:匿名挂载

docker run -it -v /home centos /bin/bash #会生成一个
docker volume ls     #查看所有volume卷的情况DRIVER              VOLUME NAMElocal               561b81a03506f31d45ada3f9fb7bd8d7c9b5e0f826c877221a17e45d4c80e096local               36083fb6ca083005094cbd49572a0bffeec6daadfbc5ce772909bb00be760882

这种情况就是匿名挂载

使用方法三:具名挂载

docker run -it  --name centos1 -v juming-centos:/etc centos
root@ubuntu:/var/run# docker psCONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES80316ef0daf7   centos    "/bin/bash"   27 seconds ago   Up 25 seconds             centos1root@ubuntu:/var/run# docker volume ls    #通过docker volume ls查询所有的卷能看到有一个具体名称的juming-centosDRIVER    VOLUME NAMElocal     57cfe1534848c2ed94c4f7489d5862fa187c7ffb8ed24db22f2b33015db3a5e8local     91371ac31c49da0fc3c17b25e7c9e8dcc108f138928cbb2fa87d356d0d6d237blocal     juming-centosroot@ubuntu:/var/run# docker volume inspect juming-centos #查看卷juming-centos的信息[    {        "CreatedAt": "2022-03-02T12:38:12Z",        "Driver": "local",        "Labels": null,        "Mountpoint": "/var/lib/docker/volumes/juming-centos/_data",        "Name": "juming-centos",        "Options": null,        "Scope": "local"    }]

我们可以进入这个数据卷目录查看

root@ubuntu:/var/lib/docker/volumes# ls57cfe1534848c2ed94c4f7489d5862fa187c7ffb8ed24db22f2b33015db3a5e8  backingFsBlockDev  metadata.db91371ac31c49da0fc3c17b25e7c9e8dcc108f138928cbb2fa87d356d0d6d237b  juming-centosroot@ubuntu:/var/lib/docker/volumes# cd juming-centos/root@ubuntu:/var/lib/docker/volumes/juming-centos# ls_dataroot@ubuntu:/var/lib/docker/volumes/juming-centos# cd _data/root@ubuntu:/var/lib/docker/volumes/juming-centos/_data# lsadjtime                  dnf            inittab        login.defs                pkcs11          resolv.conf     system-release-cpealiases                  dracut.conf    inputrc        logrotate.d               pki             rpc             terminfoalternatives             dracut.conf.d  iproute2       machine-id                pm              rpm             tmpfiles.dbash_completion.d        environment    issue          makedumpfile.conf.sample  popt.d          sasl2           udevbashrc                   ethertypes     issue.net      modprobe.d                printcap        security        vconsole.confbindresvport.blacklist   exports        kdump          modules-load.d            profile         selinux         vircbinfmt.d                 filesystems    kdump.conf     motd                      profile.d       services        X11BUILDTIME                gcrypt         kernel         mtab                      protocols       shadow          xattr.confcentos-release           gnupg          krb5.conf      netconfig                 rc0.d           shadow-         xdgcentos-release-upstream  GREP_COLORS    krb5.conf.d    NetworkManager            rc1.d           shells          xinetd.dchkconfig.d              group          ld.so.cache    networks                  rc2.d           skel            yumcrypto-policies          group-         ld.so.conf     nsswitch.conf             rc3.d           ssl             yum.confcrypttab                 gshadow        ld.so.conf.d   nsswitch.conf.bak         rc4.d           subgid          yum.repos.dcsh.cshrc                gshadow-       libaudit.conf  openldap                  rc5.d           subuidcsh.login                gss            libibverbs.d   opt                       rc6.d           sysconfigdbus-1                   host.conf      libnl          os-release                rc.d            sysctl.confdefault                  hostname       libreport      pam.d                     rc.local        sysctl.ddepmod.d                 hosts          locale.conf    passwd                    rdma            systemddhcp                     init.d         localtime      passwd-                   redhat-release  system-release

可以看到centos1容器的etc目录的所有数据


数据容器卷读写权限

# 通过 -v 容器内容路径 ro rw 改变读写权限ro  readonly    # 只读rw  readwrite   # 可读可写 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginxdocker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx # ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内容无法操作

数据容器卷总结:

# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载!-v  容器内路径                   # 匿名挂载-v  卷名:容器内路径               # 具名挂载-v /主机路径:容器内路径            # 指定路径挂载

DockerFile

DockerFile就是生成镜像的构建脚本,通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层。

# 我们这个文件的名字就是dockerfileFROM centos VOLUME ["volume01","volume02"] CMD echo "----end----"CMD /bin/bash

这个dockerfile中的意思就是从centos开始,匿名挂载了两个目录,cmd输出"----end----"并且使用bash打开这个自己构建的centos

构建dockerfile

docker build -f dockerfile -t baicha/centos1.0.1 .   #build构建了文件dockerfile,名称为baicha/centos,tag为1.0.1    !!!一定不要忘记后面的点,代表当前路径下
root@ubuntu:/home/ubuntu# docker build -f dockerfile -t baicha/centos:1.0.1 .Sending build context to Docker daemon  43.52kBStep 1/4 : FROM centos ---> e6a0117ec169Step 2/4 : VOLUME ["volume01", "volume02"] ---> Running in 0f75db803ad4Removing intermediate container 0f75db803ad4 ---> fc7f7b9f8fe5Step 3/4 : CMD echo "----end----" ---> Running in f648882c553cRemoving intermediate container f648882c553c ---> 78acc435b07bStep 4/4 : CMD /bin/bash ---> Running in 41d27fa9e770Removing intermediate container 41d27fa9e770 ---> 506c89c1f358Successfully built 506c89c1f358Successfully tagged baicha/centos:1.0.1root@ubuntu:/home/ubuntu# docker imagesREPOSITORY            TAG       IMAGE ID       CREATED         SIZEbaicha/centos         1.0.1     50e4aac3b79d   4 seconds ago   65.6MBarm64v8/mysql         oracle    3ffe8c471196   4 days ago      485MBmysql                 oracle    3ffe8c471196   4 days ago      485MBnginx                 latest    eeb9db34b331   2 months ago    134MBtomcat                9         e0c31b8f374c   2 months ago    668MBelasticsearch         7.16.2    e082d8ac7e5e   2 months ago    634MBubuntu                latest    d5ca7a445605   4 months ago    65.6MBcentos                latest    e6a0117ec169   5 months ago    272MBportainer/portainer   latest    ce24b0500fe9   11 months ago   68.4MB

运行我们创建的centos镜像

root@ubuntu:/home/ubuntu# docker run -it baicha/centos:1.0.1 /bin/bashroot@23a7c65481fb:/# ls -altotal 64drwxr-xr-x   1 root root 4096 Mar  3 12:33 .drwxr-xr-x   1 root root 4096 Mar  3 12:33 ..-rwxr-xr-x   1 root root    0 Mar  3 12:33 .dockerenvlrwxrwxrwx   1 root root    7 Oct  6 17:33 bin -> usr/bindrwxr-xr-x   2 root root 4096 Apr 15  2020 bootdrwxr-xr-x   5 root root  360 Mar  3 12:33 devdrwxr-xr-x   1 root root 4096 Mar  3 12:33 etcdrwxr-xr-x   2 root root 4096 Apr 15  2020 homelrwxrwxrwx   1 root root    7 Oct  6 17:33 lib -> usr/libdrwxr-xr-x   2 root root 4096 Oct  6 17:33 mediadrwxr-xr-x   2 root root 4096 Oct  6 17:33 mntdrwxr-xr-x   2 root root 4096 Oct  6 17:33 optdr-xr-xr-x 220 root root    0 Mar  3 12:33 procdrwx------   2 root root 4096 Oct  6 17:57 rootdrwxr-xr-x   5 root root 4096 Oct  6 17:57 runlrwxrwxrwx   1 root root    8 Oct  6 17:33 sbin -> usr/sbindrwxr-xr-x   2 root root 4096 Oct  6 17:33 srvdr-xr-xr-x  12 root root    0 Mar  3 12:33 sysdrwxrwxrwt   2 root root 4096 Oct  6 17:57 tmpdrwxr-xr-x  10 root root 4096 Oct  6 17:33 usrdrwxr-xr-x  11 root root 4096 Oct  6 17:57 vardrwxr-xr-x   2 root root 4096 Mar  3 12:33 volume01       #可以看到我们使用dockerfile挂载的两个目录都在这上面drwxr-xr-x   2 root root 4096 Mar  3 12:33 volume02

使用inspect 查看Mounts可以看到这两个卷匿名挂在的实际目录

"Mounts": [            {                "Type": "volume",                "Name": "be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e",                "Source": "/var/lib/docker/volumes/be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e/_data",                "Destination": "volume01",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            },            {                "Type": "volume",                "Name": "3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113",                "Source": "/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113/_data",                "Destination": "volume02",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            }        ],

往这两个目录中存放文件

root@ubuntu:/var/lib/docker/volumes# ls3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113  be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e
root@ubuntu:/var/lib/docker/volumes# docker exec -it 23a7c65481fb /bin/bashroot@23a7c65481fb:/# ls   bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02root@23a7c65481fb:/# cd volume01root@23a7c65481fb:/volume01# echo 'this is volum01'>helloroot@23a7c65481fb:/volume01# lshelloroot@23a7c65481fb:/volume01# cd ..root@23a7c65481fb:/# lsbin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02root@23a7c65481fb:/# cd volume02root@23a7c65481fb:/volume02# echo 'this is volums02'>helloroot@23a7c65481fb:/volume02# lshello

查看数据

root@ubuntu:/var/lib/docker/volumes# ls3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113  be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4ebackingFsBlockDev                                                 metadata.dbroot@ubuntu:/var/lib/docker/volumes# cd 3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113/root@ubuntu:/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113# ls_dataroot@ubuntu:/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113# cd _data/root@ubuntu:/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113/_data# lshelloroot@ubuntu:/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113/_data# cat hellothis is volums02root@ubuntu:/var/lib/docker/volumes/3c392a07e18924602b20a6fc6ef826d4b9d4cfac9bf080d0366fb4c02c6aa113# cd ..root@ubuntu:/var/lib/docker/volumes# cd be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e/root@ubuntu:/var/lib/docker/volumes/be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e# ls_dataroot@ubuntu:/var/lib/docker/volumes/be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e# cd _data/root@ubuntu:/var/lib/docker/volumes/be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e/_data# lshelloroot@ubuntu:/var/lib/docker/volumes/be8b7702cc2dedebf5f0716b49437af9d4f3617d2541a0c17f940df1c286ae4e/_data# cat hello this is volum01

可以看到数据已经互通了 此时我们如果启动了多个此镜像,数据会在多个容器中后互通


push镜像到官方平台

注册官方平台账号

在docker中使用login登陆

root@ubuntu:/home/ubuntu# docker login -u [用户名]Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

我们把刚构建好的baicha/centos镜像上传到官方库中

上传需要对我们需要上传的镜像重新打一个tag

可套用的公式其实是: docker tag 需要上传的镜像[:TAG] [docker hub自己注册的账号名]/镜像名[:TAG]

比如我的dockerhub账号是baicha123,存放的仓库为baicha-private。这时候我们就需要吧镜像名修改为baicha123/baicha-private:TAG

root@ubuntu:/home/ubuntu# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
baicha/centos         1.0.1     50e4aac3b79d   2 hours ago     65.6MB
arm64v8/mysql         oracle    3ffe8c471196   4 days ago      485MB
mysql                 oracle    3ffe8c471196   4 days ago      485MB
nginx                 latest    eeb9db34b331   2 months ago    134MB
tomcat                9         e0c31b8f374c   2 months ago    668MB
elasticsearch         7.16.2    e082d8ac7e5e   2 months ago    634MB
ubuntu                latest    d5ca7a445605   4 months ago    65.6MB
centos                latest    e6a0117ec169   5 months ago    272MB
portainer/portainer   latest    ce24b0500fe9   11 months ago   68.4MB
root@ubuntu:/home/ubuntu# docker tag baicha/centos:1.0.1 baicha123/baicha-private:1.0.1
root@ubuntu:/home/ubuntu# docker push baicha123/baicha-private:1.0.1
The push refers to repository [docker.io/baicha123/baicha-private]
350f36b271de: Pushed
1.0.1: digest: sha256:61db0533f2c724e19a6120b64ec361a25cc6469a8a8cc2fc27bf19fbc796a803 size: 529

可以看到我们成功吧镜像push上去了


pull我们push上去的镜像

root@ubuntu:/home/ubuntu# docker pull baicha123/baicha-private:1.0.1
1.0.1: Pulling from baicha123/baicha-private
a39c84e173f0: Already exists
Digest: sha256:61db0533f2c724e19a6120b64ec361a25cc6469a8a8cc2fc27bf19fbc796a803
Status: Downloaded newer image for baicha123/baicha-private:1.0.1
docker.io/baicha123/baicha-private:1.0.1

push镜像到阿里云平台

注册阿里云,找到控制台中的容器镜像服务

创建个人实例,然后创建我们的命名空间

创建镜像仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZT27lcM2-1646321372596)(C:\Users\ZJY\AppData\Roaming\Typora\typora-user-images\image-20220303223727391.png)]

按照操作指南在docker中登陆阿里云Docker Registry

docker login --username=[你的阿里云账户名] registry.cn-hangzhou.aliyuncs.com用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。

一样的道理,修改tag

root@ubuntu:/home/ubuntu# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED         SIZE
baicha123/baicha-private   1.0.1     50e4aac3b79d   2 hours ago     65.6MB
arm64v8/mysql              oracle    3ffe8c471196   4 days ago      485MB
mysql                      oracle    3ffe8c471196   4 days ago      485MB
nginx                      latest    eeb9db34b331   2 months ago    134MB
tomcat                     9         e0c31b8f374c   2 months ago    668MB
elasticsearch              7.16.2    e082d8ac7e5e   2 months ago    634MB
portainer/portainer        latest    ce24b0500fe9   11 months ago   68.4MB
root@ubuntu:/home/ubuntu# docker tag baicha123/baicha-private:1.0.1 registry.cn-hangzhou.aliyuncs.com/baicha/mycentos:1.0.1
root@ubuntu:/home/ubuntu# docker images
REPOSITORY                                                          TAG       IMAGE ID       CREATED         SIZE
baicha123/baicha-private                                            1.0.1     50e4aac3b79d   2 hours ago     65.6MB
registry-vpc.cn-hangzhou.aliyuncs.com/baicha/mycentos               1.0.1     50e4aac3b79d   2 hours ago     65.6MB
registry.cn-hangzhou.aliyuncs.com/baicha/mycentos/baicha/mycentos   1.0.1     50e4aac3b79d   2 hours ago     65.6MB
registry.cn-hangzhou.aliyuncs.com/baicha/mycentos                   1.0.1     50e4aac3b79d   2 hours ago     65.6MB
arm64v8/mysql                                                       oracle    3ffe8c471196   4 days ago      485MB
mysql                                                               oracle    3ffe8c471196   4 days ago      485MB
nginx                                                               latest    eeb9db34b331   2 months ago    134MB
tomcat                                                              9         e0c31b8f374c   2 months ago    668MB
elasticsearch                                                       7.16.2    e082d8ac7e5e   2 months ago    634MB
portainer/portainer                                                 latest    ce24b0500fe9   11 months ago   68.4MB

修改为域名/命名空间/仓库名:TAG #域名根据是什么网络,我是本地搭建的,就使用registry.cn-hangzhou.aliyuncs.com

push到阿里云仓库

root@ubuntu:/home/ubuntu# docker push registry.cn-hangzhou.aliyuncs.com/baicha/mycentos:1.0.1
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/baicha/mycentos]
350f36b271de: Pushed
1.0.1: digest: sha256:61db0533f2c724e19a6120b64ec361a25cc6469a8a8cc2fc27bf19fbc796a803 size: 529

可以看到成功push上去了!


Docker网络、Docker Compose、Docker Swarm等技术点等博主忙完这一阵就更新!

有兴趣访问下我的博客吧!:http://baicha.baichablog.top/

Docker容器化技术入门相关推荐

  1. Docker容器化技术教程,24小时快速入门

    Docker介绍 Docker简介和安装 Docker是什么 为什么使用Docker 和普通虚拟机的对比 打包.分发.部署 小结 Docker部署的优势 Docker通常用来做什么 重要概念:镜像.容 ...

  2. 万字长文带你探究 Docker 容器化技术背后的黑科技

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 容器的优势 传统模式的部署,直接将多个应用运行在物理服务器上,如果其中一个应用占用了大部分资源,可能会导致其他应用 ...

  3. Docker 容器化技术(介绍)

    1 虚拟化技术 因为 Docker 的容器化技术是虚拟化的一种体现形式,因此 我们要学习容器化技术之前,需要先来了解一下什么是虚拟化技术: 1.1 什么是虚拟化技术 在计算机中,虚拟化(英语:Virt ...

  4. Docker容器化技术

    一.虚拟机与容器的比较 在容器化技术出来之前,使用的是虚拟机技术,虚拟机和Docker容器技术都是一种虚拟化技术 虚拟机包含的是整个操作系统的原生镜像,非常的庞大,而docker的镜像只包含最核心的环 ...

  5. docker建多个mysql_《容器化系列二》利用Docker容器化技术安装多个mysql

    前提说明 安装的Linux系统版本为Centos7.x 一.安装docker并测试 1.安装yum相关工具包 ///安装yum相关工具包 yum install -y yum-utils device ...

  6. Docker容器化技术笔记

    学习目标 掌握Docker基础知识,能够理解Docker镜像与容器概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx等软件的常用应用的安装 掌握dock ...

  7. 深度解析容器化技术在广发证券交易系统的应用

    作者简介:杨涛,广发证券交易云技术研发团队负责人,资深架构师,在证券行业有超过9年的工作经验.目前致力于广发证券OpenTrading证券交易云核心技术研发. 责编:魏伟,本文转载自<程序员&g ...

  8. 深度解析容器化技术在广发证券交易系统的应用【转】

    原文链接:http://geek.csdn.net/news/detail/94850 本文是docker落地比较好的实践案例,文中很多地方多可以学习一下,以下是摘录: 为什么要容器化 对传统的垂直行 ...

  9. Docker 容器化部署

    文章目录 思维导图 概念 安装(基于 centos7) 结构 Docker 命令 进程(daemon)相关命令 镜像(image)相关命令 容器(container))相关命令 数据卷 数据卷容器 d ...

最新文章

  1. android高仿微信UI点击头像显示大图片效果
  2. android wifi定位服务,如何在Android中使用Wifi获取位置?
  3. linux 脚本中除法运算符,Linux中Shell的算数运算符和位运算符用法笔记
  4. 磁盘 I/O性能指标
  5. 买电脑主要看什么配置_买笔记本电脑主要看什么? 配置要什么样的才算好?...
  6. php mysql实现下拉列表查询_php mysql如何实现通过下拉框查询显示数据库中的数据...
  7. php 更新配置文件
  8. 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)
  9. 数字信号处理实验感想matlab,数字信号处理MATLAB实验报告 4.doc
  10. Everything本地文件检索 快速搜索/共享神器
  11. 雷诺方程、脉动运动方程及雷诺应力输运方程的推导
  12. GD32F103ZKT6替换STM32F103调试手记
  13. 【解决】WPS 2019 Windows版如何更换序列号
  14. Mybatis的批量插入数据库的两种方法及代码自动生成工具的使用方法
  15. 【每日新闻】诺基亚展示未来工厂:5G自动化机器人与人类和谐共处
  16. Ubuntu出现 recovering journal ; /dev/sda1: clean, ***/*** files, ***/*** blocks 等信息无法开机的问题
  17. 这是我见过描写天津女孩中最真实的
  18. K210学习记录(3)——kmodel生成与使用
  19. 身家过亿的帝都富豪来参加1024节专属盛典,小码农献上单链表一篇来庆祝盛典
  20. java课程管理系统_基于JAVA学生课程管理系统.doc

热门文章

  1. 一文盘点Steam上VR游戏之最
  2. QVTKWidget控件显示二维图片
  3. 旺旺和QQ for mac多开的方法
  4. 嘉楠堪智kendryke K210资料汇总
  5. Shell编程五次机会猜数字大小
  6. 左手沉思录道德情操论右手
  7. html备忘录时间提醒,jQuery简单带备忘录功能的日期选择器插件
  8. HTML5标签属性全在这里了
  9. Oracle存储中文生僻字:Navicat客户端不乱码而Developer显示乱码
  10. 一款无root抓包工具 AndroLuaJ