Docker

Docker学习

Docker概述

Docker为什么出现?

对于开发人员来说,可执行的war包,jar包,他算一个应用程序。他们又无法独立运行,war包需要依赖tomcat提供的web环境,jar包需要jdk提供的api和环境支持。tomcat,jdk本身不是终端环境,他们又需要依附于操作系统。再往下走硬件环境又是对操作系统的支撑。

docker扩展了应用程序的概念,从狭义上的概念,扩展为广义上。war包、jar包、Tomcat容器、MySQL数据库只能属于狭义上的应用程序,而广义上的应用程序应该包含可以支撑起他的整个依赖环境与配置。

docker认为单独的一个完整的应用程序应该是:应用程序本身+其所有的依赖环境,docker把这一套东西,全部打包到一个集装箱,我们拿到集装箱后可以直接使用,而不需要再依赖于其他环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lWgimla-1634132100289)(docker\Docker图标.png)]

Docker思想源于集装箱。

隔离:Docker核心思想!打包装箱,每个箱子互相隔离。

Docker通过隔离机制将服务器利用到极致。

Docker的历史

2010年,dotCloud公司在美国成立。

他们将自己的容器化技术命名为Docker。

起初Docker收费,但并不火;开源后火的一塌糊涂。

开源

2013年,Docker开源。

越来越的人发现Docker的优点,Docker火了,每个月都会更新一个版本。

2014年4月9日,Docker1.0发布。

Docker为什么会火?十分的轻巧

容器技术未出现之前,都是使用虚拟机技术。

虚拟机Docker
linux centos原生镜像(一个电脑)隔离镜像(最核心的环境 +jdk +mysql等)
需要开启多个虚拟机运行镜像就可以了
几GB几MB

Docker官网和文档

Docker是基于GO语言开发的,开源项目。

官网:

https://www.docker.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3aqkkET-1634132100293)(docker\Docker官网文档位置.png)]

官网文档:

https://docs.docker.com/

仓库地址:

https://hub.docker.com/

Docker能做什么?

Docker与虚拟机相比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V7UACemw-1634132100295)(docker\Docker vs 虚拟机.png)]

Docker的优点

  • 不模拟完整的操作系统,系统内核(kernel)非常小,更少的抽象层(GueatOS:如CentOS)。
  • 容器内的应用直接运行在宿主机的内核,容器本身没有自己的内核,也没有虚拟机硬件。
  • 每个容器相互隔离,内部都有属于自己的文件系统,互不影响。

Docker实现DevOps(开发、运维)

  • 应用更快速的交付和部署

    打包镜像发布测试,一键运行;不再需要写大量帮助文档,安装程序。

  • 更便捷的升级和扩容

    部署应用就和搭积木一样

  • 更简单的系统运维

    开发和测试的环境高度一致

  • 更高效的计算资源利用

    内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器性能可以被压榨到极致。

Docker安装

Docker的基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WXIA4h8-1634132100299)(docker/Docker组成.png)]

  • 镜像(image):镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。相当于一个模板,通过这个模板来创建容器服务,可以通过一个镜像创建多个服务。
  • 容器(container):独立运行一个或一组应用/基本命令有:启动、停止、删除等/可理解为一个简单的linux系统。
  • 仓库(repository):存放镜像的地方(公有/私有)。

安装Docker

  • 检查服务器内核
[root@iZ8vbeqy030q9adtf7d76qZ /]# uname -r
4.18.0-147.5.1.el8_1.x86_64
  • 查看系统版本
[root@iZ8vbeqy030q9adtf7d76qZ /]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
  • 按装步骤
# 1、卸载旧的版本
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 #阿里云镜像地址
# 更新软件包索引
yum makecache fast    # centos8 没有timer参数  要去掉fast
# 4、安装Docker相关的内容
yum install docker-ce docker-ce-cli containerd.io
# 5、启动Docker
systemctl start docker
# 6、查看是否安装成功
docker version
# 7、测试hello-world
hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ol5jOorP-1634132100302)(docker/hello-world.png)]

#8、查看一下子下载的hello-world镜像
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   2 months ago   13.3kB
  • 卸载docker
# 1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2、删除目录
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

阿里云镜像加速

  1. 登录阿里云找到容器镜像服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUJ9rFXO-1634132100304)(docker/1622464008094.png)]

  1. 找到镜像加速地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2v6Jt3C-1634132100306)(docker/1622464146246.png)]

  1. 配置使用
# 1.新建doker文件夹
mkdir -p /etc/docker
# 2.新建daemon.json文件配置阿里云镜像
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://15x0uh6n.mirror.aliyuncs.com"]
}
EOF
# 3.重启镜像
systemctl daemon-reload
# 4.重启docker
systemctl restart docker

Dockers run 过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0hRfJvA-1634132100308)(docker/2021-05-31_205636.png)]

底层原理

Docker是怎么工作的?

Docker是一个Client-Sever结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。

DockerSever接收到DockerClient的指令,就会执行这个命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMpWchbN-1634132100311)(docker/1622467358828.png)]

Docker为什么比VM快?

  1. Docker有着比VM更少的抽象层
  2. Docker利用的是宿主机的内核,VM需要的是Guest OS。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CL4GWBpc-1634132100312)(docker/Docker vs 虚拟机.png)]

新建一个容器的时候,Docker不需要像VM一样重新加载一个虚拟机的内核,避免引导。VM加载Guest OS是分钟级别的,而Docker利用的是宿主机的操作系统,省略了这个复杂的过程,是秒级的。

Docker常用命令

帮助命令

docker version      # 显示docker的版本信息
docker info         # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help  # 帮助命令  显示当前命令的作用

帮助文档:

https://docs.docker.com/reference/

镜像命令

Ctrl C 后,在Xshell窗口点击书表滚轮即可完成粘贴

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

[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   2 months ago   13.3kB

# 解释
REPOSITORY  # 镜像的仓库源  (仓库名)
TAG         # 镜像的标签 (版本)
IMAGE ID    # 镜像的ID
CREATED     # 镜像的创建时间
SIZE        # 镜像的大小
# 可选项
-a, --all             # 列出所有镜像  (包括隐藏镜像)
-q, --quiet           # 只显示镜像的ID

docker serach 搜索镜像

[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10932     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4134      [OK]       

# 可选项,通过收藏来过滤
-f, --filter=STARS=3000   # 搜索出来的镜像就是STARS大于3000的

root@iZ8vbeqy030q9adtf7d76qZ docker]# docker search mysql -f=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10932     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4134      [OK]   

docker pull 下载镜像

# 下载镜像 docker pull 镜像名:tag
[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker pull mysql
Using default tag: latest  # 如果不写tag默认就是 latest (最新版)
latest: Pulling from library/mysql
69692152171a: Pull complete  # 分层下载,docker image的核心 文件联合系统 
1651b0be3df3: Pull complete 
951da7386bc8: Pull complete 
0f86c95aa242: Pull complete 
37ba2d8bd4fe: Pull complete 
6d278bb05e94: Pull complete 
497efbd93a3e: Pull complete 
f7fddf10c2c2: Pull complete 
16415d159dfb: Pull complete 
0e530ffc6b73: Pull complete 
b0a4a1a77178: Pull complete 
cd90f92aa9ef: Pull complete 
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969  # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  # 真实地址
# docker pull 等价于 docker.io/library/mysql:latest

# 指定版本下载
[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker pull mysql:5.7
5.7: Pulling from library/mysql
69692152171a: Already exists 
1651b0be3df3: Already exists 
951da7386bc8: Already exists 
0f86c95aa242: Already exists 
37ba2d8bd4fe: Already exists 
6d278bb05e94: Already exists 
497efbd93a3e: Already exists  # 分层下载,已经存在的不会再下
a023ae82eef5: Pull complete 
e76c35f20ee7: Pull complete 
e887524d2ef9: Pull complete 
ccb65627e1c3: Pull complete 
Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKSHhwkK-1634132100314)(docker/2021-05-31_225815.png)]

docker rmi 删除镜像

# 根据id删除镜像 
[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker rmi -f 2c9028880e58
Untagged: mysql:5.7   # 只会删除5.7版本特有的文件
Untagged: mysql@sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Deleted: sha256:2c9028880e5814e8923c278d7e2059f9066d56608a21cd3f83a01e3337bacd68
Deleted: sha256:c49c5c776f1bc87cdfff451ef39ce16a1ef45829e10203f4d9a153a6889ec15e
Deleted: sha256:8345316eca77700e62470611446529113579712a787d356e5c8656a41c244aee
Deleted: sha256:8ae51b87111404bd3e3bde4115ea2fe3fd2bb2cf67158460423c361a24df156b
Deleted: sha256:9d5afda6f6dcf8dd59aef5c02099f1d3b3b0c9ae4f2bb7a61627613e8cdfe562
# 删除多个镜像 
[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker rmi -f  镜像id 镜像id 镜像id
# 删除全部的镜像 
[root@iZ8vbeqy030q9adtf7d76qZ docker]# docker rmi -f $(docker images -aq)

容器命令

  • 有镜像才可以创建容器
docker pull centos
  • 新建容器并启动
docker run 参数 imge

# 参数说明
--name="Name"   # 容器名字,用来区分名字
-d              # 后台方式运行
-it             # 使用交互方式运行,进入容器查看内容
-p              # 指定容器的短开 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	容器端口
-P 随机指定端口

# 测试,启动并进入容器
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -it centos /bin/bash
[root@74a2d3c30287 /]# ls   # 查看容器内的centos,基础版本,很多命令不完善
# 从容其中退回主机
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -it centos /bin/bash
[root@74a2d3c30287 /]# 
  • 列出所运行的容器
# docker ps  # 列出当前正在运行容器
-a           #列出当前正在运行+历史运行过的容器
-n=?         #列出几个容器
-q           #只显示容器的id
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps -a  # 列出所运行+历史运行过的容器
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                       PORTS     NAMES
74a2d3c30287   centos         "/bin/bash"   6 minutes ago   Exited (130) 2 minutes ago             quizzical_knuth
312bca0119f5   d1165f221234   "/hello"      2 days ago      Exited (0) 2 days ago                  friendly_faraday
3c30a3026777   d1165f221234   "/hello"      2 days ago      Exited (0) 2 days ago                  fervent_nash
626706170f9b   d1165f221234   "/hello"      2 days ago      Exited (0) 2 days ago                  eloquent_feynman
666319815f95   d1165f221234   "/hello"      2 days ago      Exited (0) 2 days ago                  distracted_feistel
afe803eceaa4   d1165f221234   "/hello"      3 days ago      Exited (0) 3 days ago                  eloquent_payne 
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps -n=2 -aq
74a2d3c30287
312bca0119f5
[root@iZ8vbeqy030q9adtf7d76qZ /]# 
  • 推出容器
exit       # 直接容器停止并推出
Ctrl+P+Q   # 容器不停止推出
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker run -it centos /bin/bash
[root@a5e0291b79ff /]# [root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
a5e0291b79ff   centos    "/bin/bash"   34 seconds ago   Up 33 seconds             charming_bose
[root@iZ8vbeqy030q9adtf7d76qZ /]# 
  • 删除容器
docker rm 容器id                            # 删除指定的容器,不能删除正在运行中的容器
docker rm -f $(docker ps -aq)              # 删除所有的容器
docker ps -a -q|xargs docker rm            # 删除所有的容器
  • 启动和停止容器
docker start 容器id       # 启动容器
docker restart 容器id     # 重启容器
docker stop 容器id		# 停止当前正在运行的容器
docker kill 容器id        # 强制停止当前容器

常用的其他命令

  • 后台启动容器、
# 命令 docker run -d 镜像名
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker run -d centos
78ccbdd3b933850ed19232336a7afbab15c41350be0cdb39a24b3ab5e4393d99
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# 问题 docker ps 发现 centos 被停止了
#原因docker容器使用后台运行,就必须有一个前台的进程,docker发现没有应用就会停止
  • 查看日志
docker logs -t -f --tail num 容器,没有日志
# 自己写一段shell脚本
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker run -d centos /bin/bash -c "while true;do echo helloworld;sleep 1;done"
4f1d162bc2c3abab2bb921d9a9704104749eb0dfba953cefd4e032d27ef6bdc0
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        
4f1d162bc2c3   centos    "/bin/bash -c 'while…"   6 seconds ago
# 显示日志
-tf  # 显示日志
--tail num    # 显示日志的条数
  • 查看容器进程信息 ps
# 命令 docker top 容器id 
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker top a6ca12e8f719
UID      PID       PPID      C       STIME     TTY        TIME         
root    10039     10017      0      15:36       ?      00:00:00     
root    10281     10039      0      15:38       ?      00:00:00           
  • 查看镜像的元数据
# 命令 docker inspect 容器id

#测试
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker inspect a6ca12e8f719
[
    {
        "Id": "a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e",
        "Created": "2021-06-05T07:36:12.058953749Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo yangguuanghua;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 10039,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-06-05T07:36:12.594299978Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "ResolvConfPath": "/var/lib/docker/containers/a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e/hostname",
        "HostsPath": "/var/lib/docker/containers/a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e/hosts",
        "LogPath": "/var/lib/docker/containers/a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e/a6ca12e8f719981ba8c45b1bcf48e3f034daedeff8dbe32b485fb0255ba9697e-json.log",
        "Name": "/eloquent_heyrovsky",
        "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/efda40e0c7131adc292507b8d122d5c1b43744b4278786242af179524aec9a0f-init/diff:/var/lib/docker/overlay2/3d8851140e7660cdd07f7ac31a4888d3e2911ec8d5136502c9f18ac805abfe2b/diff",
                "MergedDir": "/var/lib/docker/overlay2/efda40e0c7131adc292507b8d122d5c1b43744b4278786242af179524aec9a0f/merged",
                "UpperDir": "/var/lib/docker/overlay2/efda40e0c7131adc292507b8d122d5c1b43744b4278786242af179524aec9a0f/diff",
                "WorkDir": "/var/lib/docker/overlay2/efda40e0c7131adc292507b8d122d5c1b43744b4278786242af179524aec9a0f/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "a6ca12e8f719",
            "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/bash",
                "-c",
                "while true;do echo yangguuanghua;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "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": "522843d544f07c47d1cbf654d18e77fbfecbdf6e13bb284aceb1dbfea00458c2",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/522843d544f0",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "7961d4c007849dd7d3bf46f301cd556e36b47b4cc8d790519006592b0602b3f3",
            "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": "d1841fc312217aca6cc2f28ae5a5a6ea6c7b0f814bbfd5e1bce5143e1248147e",
                    "EndpointID": "7961d4c007849dd7d3bf46f301cd556e36b47b4cc8d790519006592b0602b3f3",
                    "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 容器id bashshell
# 测试
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
a6ca12e8f719   centos    "/bin/bash -c 'while…"   17 minutes ago   Up 17 minutes             eloquent_heyrovsky
[root@iZ8vbeqy030q9adtf7d76qZ /]# docker exec -it a6ca12e8f719 /bin/bash
[root@a6ca12e8f719 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@a6ca12e8f719 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 07:36 ?        00:00:00 /bin/bash -c while true;do echo yangguuanghua;sleep 1;done
root      1111     0  1 07:54 pts/0    00:00:00 /bin/bash
root      1139     1  0 07:54 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root      1140  1111  0 07:54 pts/0    00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
docker attach a6ca12e8f719
正在执行当前的代码...

# 区别
# docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach 进入容器正在执行的终端,不会启动新进程
  • 从容器内拷贝文件到主机上
docker cp 容器id:容器内的路径  目的主机路径
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -it centos /bin/bash
[root@3f868f0a2f6c /]# cd /home
[root@3f868f0a2f6c home]# touch test.java
[root@3f868f0a2f6c home]# ls
test.java
[root@3f868f0a2f6c home]# exit
exit
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker cp 3f868f0a2f6c:/home/test.java /home
[root@iZ8vbeqy030q9adtf7d76qZ ~]# cd /home
[root@iZ8vbeqy030q9adtf7d76qZ home]# ls
test.java
[root@iZ8vbeqy030q9adtf7d76qZ home]# 

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HpD2U3Ha-1634132100316)(docker/20201212210110.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JoTjQBmU-1634132100318)(docker/2021-06-05_220319.png)]

作业练习

Docker 安装Nginx

# 1、搜索镜像 docker search  建议用docker搜索,可以看帮助文档
# 2、下载镜像 docker pull 镜像名:版本号
# 3、运行测试
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    d1a364dc548d   10 days ago    133MB
centos       latest    300e315adb2f   5 months ago   209MB

# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -d --name nginx02 -p 3389:80 nginx
96f3bdd7bc32bbc8f52dbb3880a1a5fa4e2f15648881fe9ba3e0ba95a72feb77
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
96f3bdd7bc32   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds   0.0.0.0:3344->80/tcp, :::3389->80/tcp   nginx02

# 进入容器
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker exec -it nginx03 /bin/bash
root@442e0907f7ba:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@442e0907f7ba:/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 run -it --name,用后即删,一般用来测试
# 下载启动
docker pull tomcat
# 启动运行
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -d -p 3389:8080 --name tomcat01 tomcat
# 测试访问没有问题
# 进入容器
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker exec -it a54c1d032ad7 /bin/bash 
# 发现问题: 1、linux命令少了 2、没有webapps是空  阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉。
# 保证最小可运行环境!
# 解决方案
# 1、把webapps.dist改名成webapps
# 1、把webapps.dist内的内容复制到webapps
root@a54c1d032ad7:/usr/local/tomcat# cp -r webapps.dist/* webapps

作用:部署 es+kibana

# es暴露的端口很多
# es十分的耗内存
# es的数据一般需放置到安全目录,挂载!
# --net somenetwork 网络配置

# 启动elasticsearch
$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# es很占内存,linux变卡    
# 测试一下es是否安装成功
[root@iZ8vbeqy030q9adtf7d76qZ ~]# curl localhost:9200
{
  "name" : "11edc67ef897",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "6NGAEtUKQ3WwusYKqWxAZA",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
# docker stats 查看cpu的状态
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O    PIDS
11edc67ef897   elasticsearch   0.22%     1.24GiB / 3.692GiB    33.57%    2.08kB / 984B   0B / 804kB   43
adea790d09b1   tomcat01        0.14%     155.9MiB / 3.692GiB   4.12%     11kB / 214kB   0B / 0B      35
# 赶紧关闭,增加内存限制  修改配置文件 -e 环境配置修改
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker run -d --name elasticsearch06 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx1024m" elasticsearch:7.6.2
d782459e2c51b0072e664836048e35a16f521ea9dc475b92b573a9d2d90c71bc
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
d782459e2c51   elasticsearch:7.6.2   "/usr/local/bin/dock…"   4 seconds ago   Up 2 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch06

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k4MVibO7-1634132100320)(docker/2021-06-07_211332.png)]

可视化

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

什么是portainer?

Docker图形化管理工具,提供一个后台面板供我们操作。

ngle-node" -e ES_JAVA_OPTS="-Xms512m -Xmx1024m" elasticsearch:7.6.2
d782459e2c51b0072e664836048e35a16f521ea9dc475b92b573a9d2d90c71bc
[root@iZ8vbeqy030q9adtf7d76qZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d782459e2c51 elasticsearch:7.6.2 “/usr/local/bin/dock…” 4 seconds ago Up 2 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch06


[外链图片转存中...(img-k4MVibO7-1634132100320)]

### 可视化

- **portainer**

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

什么是portainer?

Docker图形化管理工具,提供一个后台面板供我们操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值