狂神说Docker学习笔记整理(一)

docker概述

Dokcer为什么会出现,发布项目同时带上环境(镜像),避免本地开发环境与测试生产环境的不一致导致的麻烦。
Docker基于Go语言开发的!开源项目!
docker官网:https://www.docker.com/
文档:https://docs.docker.com/ Docker的文档是超级详细的!
仓库:https://hub.docker.com/

docker可以做什么

以前的虚拟化技术
在这里插入图片描述
虚拟化技术缺点:
1资源占用十分多
2冗余步骤多
3启动很慢

容器化技术:
容器化技术不是模拟一个完整的操作系统
在这里插入图片描述
比较docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件
  • 容器内的应用直接运行再宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器间是互相隔离,每个容器内有一个属于自己的文件系统,互不影响

DevOps(开发、运维)
更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker: 打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了docker之后,我们部署应用就和搭积木类似
项目打包为一个镜像,扩展,服务器A ->服务器B
更简单的系统运维
在容器化后,开发与测试环境都是高度一致的
更高效计算机资源利用
docker是内核级别的虚拟化,可以在一个物理机上运行多个容器实例,可以有效利用服务器的资源性能

Docker安装

docker的基本组成

在这里插入图片描述
镜像image
docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像==> run==>tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行在容器中)
容器container
docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建
启动,停止,删除等都是其基本命令(可以把这个容器简单理解为就是一个简易Linux系统)
仓库repository
仓库就是存放镜像的地方!
仓库分为公有仓库和私用仓库
Dokcer hub 是国外的
阿里云…都有容器服务器(配置镜像加速!)

安装docker

环境准备
Linux要求内核3.0以上
centOS 7
Xshell连接远程服务器进行操作
环境查看
查看系统内核 # uname -r

#查看系统内核 uname -r
yons@yons-X10SRA:~$ sudo uname -r
5.4.0-81-generic
yons@yons-X10SRA:~$ 
#查看系统版本 cat os-release
yons@yons-X10SRA:/etc$ cat os-release 
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
yons@yons-X10SRA:/etc$ 

安装

#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 \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用国内的
    
#更新yum软件包索引
yum makecache fast

#4.安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io # 这里我们使用社区版即可
	
	#指定安装版本
	yum install docker-ce-<version-string> docker-ce-cli-<version-string> containerd.io
	
#5.启动docker
systemctl start docker

#6. 使用docker version查看是否按照成功
docker version

	yons@yons-X10SRA:/$ docker version
	Client:
	Version:           18.06.2-ce
	API version:       1.38
	Go version:        go1.10.3
	Git commit:        6d37f41
	Built:             Sun Feb 10 03:47:56 2019
	OS/Arch:           linux/amd64
	Experimental:      false

#7. 测试
docker run hello-world

#8. docker images 查看已经下载的镜像(从这里可以查看已有镜像的id) 本人没有测试hello-world
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB
yons@yons-X10SRA:/$ 

卸载

#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#2. 删除资源
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默认工作路径!

阿里云镜像加速

1登录阿里云找到容器服务
在这里插入图片描述
2找到镜像加速器
在这里插入图片描述
3配置使用

#1.创建一个目录
sudo mkdir -p /etc/docker

#2.编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://t2wwyxhb.mirror.aliyuncs.com"]
}
EOF

#3.重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾hello world

在这里插入图片描述
Hello world 是怎么运行的
在这里插入图片描述
底层原理:docker是怎样工作的?
Docker是一个client-server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问!dockerServer接收到docker-client的指令就会执行命令!
在这里插入图片描述
Docker为什么比虚拟机更快

  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • docker利用的是宿主机的内核,vm需要是guestos

在这里插入图片描述
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,从而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机是加载GuestOS,分钟级别的,而docker是利用宿主机的操作系统,省掉了这个复杂的过程,秒级

Docker的常用命令

帮助命令

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

镜像命令

docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
	docker images -a #查看所有本地主机上的镜像详情
	docker images -aq #查看所有本地主机上的镜像id
docker search #搜索镜像
	docker search image name # docker search mysql
docker pull #下载镜像docker image pull
	docker pull image name ~ docker pull tomcat:8 #如果不写tag,默认就是latest
docker rmi #删除镜像 docker image rmi
	docker rmi -f 镜像id #删除指定id的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像

测试

查看镜像
docker images

yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB

说明:
REPOSITORY 镜像的仓库源
TAG 镜像的标签 – latest最新的意思
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小

镜像搜索 docker search image name

yons@yons-X10SRA:/$ sudo docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11315               [OK]                
mariadb                           MariaDB Server is a high performing open sou…   4302                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   839                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   550                 [OK]                
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   301                 [OK]                
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   91                                      
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   88                                      
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                                      [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         46                                      
prom/mysqld-exporter                                                              42                                      [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35                                      
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   31                                      
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   30                                      [OK]
mysql/mysql-router                MySQL Router provides transparent routing be…   21                                      
centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20                                      
arey/mysql-client                 Run a MySQL client from a docker container      18                                      [OK]
fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   16                                      [OK]
yloeffler/mysql-backup            This image runs mysqldump to backup data usi…   7                                       [OK]
genschsa/mysql-employees          MySQL Employee Sample Database                  7                                       [OK]
openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offici…   3                                       
ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                                       [OK]
jelastic/mysql                    An image of the MySQL database server mainta…   2                                       
widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   1                                       [OK]

下载镜像 docker pull imagename
在这里插入图片描述
删除镜像 docker rmi
在这里插入图片描述

#查看镜像
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              dd34e67e3371        7 days ago          133MB
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB
centos              latest              300e315adb2f        8 months ago        209MB
#根据id删除镜像
yons@yons-X10SRA:/$ sudo docker rmi -f 300e315adb2f
Untagged: centos:latest
Untagged: centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Deleted: sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
#查询镜像
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              dd34e67e3371        7 days ago          133MB
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB

容器命令

说明:我们有了镜像才可以创建容器,下载一个centos镜像来测试学习

docker pull centos #下载镜像

docker run 镜像id #新建容器并启动
	docker run [可选参数] image|Docker container run [可选参数] image
	Docker run [可选参数] image
	#参数说明
	--name=“Name”      容器名称 tomcat1 tomcat2 用来区分容器
	-d                 后台方式运行
	-it                使用交互方式运行,进入容器查看内容
	-p                 指定容器的端口 –p 8080:8080
		-p ip:主机端口:容器端口
		-p 主机端口:容器端口(常用)
		-p 容器端口
		容器端口
	-P 					随机指定端口
	docker run -it centos /bin/bash #测试启动并进入容器
	exit #从容器退回主机
	
docker ps 列出所有运行的容器 docker container list 
	docker ps [可选参数]
	docker ps -a #列出当前正在运行的容器+带出历史运行过的容器
	docker ps -n=? #列出最近创建的n个容器n=1则只列出最近创建的一个容器
	docker ps -q #列出容器的编号
	
docker rm 容器id  #删除指定容器,不能删除正在运行的容器,如果要强制删除rm-rf
	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 #强制停止当前容器

退出容器

exit #容器直接退出
Ctrl+p+q #容器不停止退出 
#下载镜像
yons@yons-X10SRA:/$ sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
#查看镜像
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB
centos              latest              300e315adb2f        8 months ago        209MB
#测试、启动并进入容器
yons@yons-X10SRA:/$ sudo docker run -it centos /bin/bash
#查看容器内的centos 基础版本 很多命令都不完善
[root@82e650d71b06 /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@82e650d71b06 /]# 

列出当前正在运行的容器

docker ps 命令  		#列出当前正在运行的容器
  -a, --all     	 #列出当前正在运行的容器 + 带出历史运行过的容器
  -n=?, --last int   #列出最近创建的?个容器 ?为1则只列出最近创建的一个容器,为2则列出2个
  -q, --quiet        #只列出容器的编号
#列出当前正在运行的容器
yons@yons-X10SRA:/$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
0db996879b02        rancher/rancher     "entrypoint.sh"     2 weeks ago         Restarting (1) 14 seconds ago                       rancher
 #列出当前正在运行的容器 + 带出历史运行过的容器
yons@yons-X10SRA:/$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS               NAMES
82e650d71b06        centos              "/bin/bash"              13 minutes ago      Exited (0) 4 minutes ago                            gallant_blackwell
58a8512336d2        mysql:5.7           "docker-entrypoint.s…"   4 days ago          Exited (0) 44 hours ago                             mysql01
0db996879b02        rancher/rancher     "entrypoint.sh"          2 weeks ago         Restarting (1) 55 seconds ago                       rancher
yons@yons-X10SRA:/$ 

常用的其他命令

后台启动容器

#命令 docker run –d 镜像名
#docker run –d centos
#问题 docker ps ,发现 centos 停止了
常见的坑,docker 容器使用后台运行,就必须要一个前台进程,docker发现没有应用,就会自动停止

# 命令 
docker run -d 镜像名

yons@yons-X10SRA:/$ sudo docker run -d centos
ca0c9ace489b6ddc34a65061b0cd4c953a087e3810a0ec8aa00e2534dac5fc3d
yons@yons-X10SRA:/$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
0db996879b02        rancher/rancher     "entrypoint.sh"     2 weeks ago         Restarting (1) 35 seconds ago                       rancher

# 问题docker ps. 发现centos 停止了
# 常见的坑,docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

#命令
docker logs --help
Options:
      --details        Show extra details provided to logs 
*  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
*      --tail string    Number of lines to show from the end of the logs (default "all")
*  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
➜  ~ docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done" #模拟日志      
#显示日志
-tf		#显示日志信息(一直更新)
--tail number #需要显示日志条数
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志

查看容器中的进程信息

#命令
docker top 容器id

在这里插入图片描述

查看镜像的元数据

#命令
docker inspect 容器id
yons@yons-X10SRA:/$ sudo docker inspect 0db996879b02
[
    {
        "Id": "0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200",
        "Created": "2021-08-07T02:30:14.369364742Z",
        "Path": "entrypoint.sh",
        "Args": [],
        "State": {
            "Status": "restarting",
            "Running": true,
            "Paused": false,
            "Restarting": true,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 1,
            "Error": "",
            "StartedAt": "2021-08-25T08:25:31.813785453Z",
            "FinishedAt": "2021-08-25T08:25:37.529326425Z"
        },
        "Image": "sha256:d7329a56a8e400f4a6ce4267c877b04d2dfe3d85d531dbb0ada694f677fe1949",
        "ResolvConfPath": "/var/lib/docker/containers/0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200/hostname",
        "HostsPath": "/var/lib/docker/containers/0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200/hosts",
        "LogPath": "/var/lib/docker/containers/0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200/0db996879b024d4571ac411ddd95e39cefc794120343d89be6e18f9ba2f5a200-json.log",
        "Name": "/rancher",
        "RestartCount": 3199,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "unconfined",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/opt/rancher2:/var/lib/rancher"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "3",
                    "max-size": "10m"
                }
            },
            "NetworkMode": "default",
            "PortBindings": {
                "443/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "443"
                    }
                ],
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": true,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": [
                "label=disable"
            ],
            "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,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": null,
            "ReadonlyPaths": null
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/a50a42aa433d418b743316e94525924b43cd0d2fab47f14d4956b28af47d439d-init/diff:/var/lib/docker/overlay2/357646c5ac2d97f73fe44bf76166466aa2d4a45aad4316f3c4418d7140aa6337/diff:/var/lib/docker/overlay2/18d1f0214d626484c5c2473d5e0ed2e087d35e91ccf1838bcc0f167086937648/diff:/var/lib/docker/overlay2/72a31bebc81e2d85f1adf714f89739e800504d3413462de6103d152b5884bc39/diff:/var/lib/docker/overlay2/63b174797235f47c2830786a19fb6c6713f0fa2ae72b29ffb81eda4a62ac60b9/diff:/var/lib/docker/overlay2/a1f4c5fcb65c149dbeaa9b3d4dc6c44fde64dbd222c46a254b4fd4c29888e611/diff:/var/lib/docker/overlay2/3c6d5e9754441259bc33e4b8bd0f0bcad89d31ece9f10422b38b15b61de3d48f/diff:/var/lib/docker/overlay2/2e3d2598f0488d1f9735880e8efe1d3f15e2298280f934f22434aa90f8c8452e/diff:/var/lib/docker/overlay2/de64e7b32ef482251e73387500e4c9cb355825b0f93f795bcedf652b4eeecefe/diff:/var/lib/docker/overlay2/4bb65bee6501d83b438d66f75a38fbaeb69af258ef16bb14c0d4a944824c5b63/diff:/var/lib/docker/overlay2/9da4759920544a4e7b039a5bf6d2b78e9fba9130064ba4c00fc44129bdda2638/diff:/var/lib/docker/overlay2/91a1bcb650f528bef7621146695790722b5d7baa2c8532b8b6d150e959806ead/diff:/var/lib/docker/overlay2/c0b1d93cc2ff30d5b9759240695a200b06c5eb732b5ddcafa64943db2b0ca907/diff:/var/lib/docker/overlay2/b032a54084859f24b3a8496c12d4342c39609d48296e9cf2efbbbfebaa4e5028/diff:/var/lib/docker/overlay2/ad7c0f582d0f179fb0a4951948cf0931415710b9eaaa5715f08b8ddfa19ff12f/diff:/var/lib/docker/overlay2/912d55a6653a03836bc0c3f50be9d45f5460dea41bb6d73ac52979b9e731db0d/diff:/var/lib/docker/overlay2/a46eb14a50be1efb7e490bb4421be78e7080839d389acb19e44c4edf45917dbc/diff:/var/lib/docker/overlay2/c773f6d974900f899e19134e46dd7a304936bf8e95496dc5b3fe7edc76f2d1c0/diff:/var/lib/docker/overlay2/c2281f10ca041a05a3650a6f12b6d4ed9f4490a0296135cbf51ad5ab92bb914a/diff",
                "MergedDir": "/var/lib/docker/overlay2/a50a42aa433d418b743316e94525924b43cd0d2fab47f14d4956b28af47d439d/merged",
                "UpperDir": "/var/lib/docker/overlay2/a50a42aa433d418b743316e94525924b43cd0d2fab47f14d4956b28af47d439d/diff",
                "WorkDir": "/var/lib/docker/overlay2/a50a42aa433d418b743316e94525924b43cd0d2fab47f14d4956b28af47d439d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "91cc99345219387e943888b749db6e1e50dcde187e7b67dd8a9c1a0f5be35cbf",
                "Source": "/var/lib/docker/volumes/91cc99345219387e943888b749db6e1e50dcde187e7b67dd8a9c1a0f5be35cbf/_data",
                "Destination": "/var/log",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "8e6fa1d5f832e63f155cf31ee1889e53962c5886c639d351fbb08140b4481627",
                "Source": "/var/lib/docker/volumes/8e6fa1d5f832e63f155cf31ee1889e53962c5886c639d351fbb08140b4481627/_data",
                "Destination": "/var/lib/cni",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "31b4ad06a79e920b39b6db9bcc12e642e24c8fc55dfa701a085c0bc73d9a1d26",
                "Source": "/var/lib/docker/volumes/31b4ad06a79e920b39b6db9bcc12e642e24c8fc55dfa701a085c0bc73d9a1d26/_data",
                "Destination": "/var/lib/kubelet",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "bind",
                "Source": "/opt/rancher2",
                "Destination": "/var/lib/rancher",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "0db996879b02",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "443/tcp": {},
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "CATTLE_SYSTEM_CHART_DEFAULT_BRANCH=release-v2.5",
                "CATTLE_CHART_DEFAULT_BRANCH=release-v2.5",
                "CATTLE_PARTNER_CHART_DEFAULT_BRANCH=main",
                "CATTLE_HELM_VERSION=v2.16.8-rancher1",
                "CATTLE_K3S_VERSION=v1.19.8+k3s1",
                "CATTLE_MACHINE_VERSION=v0.15.0-rancher55",
                "CATTLE_ETCD_VERSION=v3.4.3",
                "CATTLE_CHANNELSERVER_VERSION=v0.5.0",
                "LOGLEVEL_VERSION=v0.1.3",
                "TINI_VERSION=v0.18.0",
                "TELEMETRY_VERSION=v0.5.14",
                "KUBECTL_VERSION=v1.19.7",
                "DOCKER_MACHINE_LINODE_VERSION=v0.1.8",
                "LINODE_UI_DRIVER_VERSION=v0.3.0",
                "RANCHER_METADATA_BRANCH=release-v2.5",
                "HELM_VERSION=v3.3.1",
                "KUSTOMIZE_VERSION=v3.5.4",
                "CATTLE_FLEET_MIN_VERSION=0.3.500",
                "CATTLE_RANCHER_OPERATOR_MIN_VERSION=0.1.400",
                "CATTLE_RANCHER_WEBHOOK_MIN_VERSION=0.1.000",
                "TINI_URL_amd64=https://github.com/krallin/tini/releases/download/v0.18.0/tini",
                "TINI_URL_arm64=https://github.com/krallin/tini/releases/download/v0.18.0/tini-arm64",
                "TINI_URL=TINI_URL_amd64",
                "HELM_URL_V2_amd64=https://github.com/rancher/helm/releases/download/v2.16.8-rancher1/rancher-helm",
                "HELM_URL_V2_arm64=https://github.com/rancher/helm/releases/download/v2.16.8-rancher1/rancher-helm-arm64",
                "HELM_URL_V2=HELM_URL_V2_amd64",
                "HELM_URL_V3=https://get.helm.sh/helm-v3.3.1-linux-amd64.tar.gz",
                "TILLER_URL_amd64=https://github.com/rancher/helm/releases/download/v2.16.8-rancher1/rancher-tiller",
                "TILLER_URL_arm64=https://github.com/rancher/helm/releases/download/v2.16.8-rancher1/rancher-tiller-arm64",
                "TILLER_URL=TILLER_URL_amd64",
                "K3S_URL_amd64=https://github.com/rancher/k3s/releases/download/v1.19.8+k3s1/k3s",
                "K3S_URL_arm64=https://github.com/rancher/k3s/releases/download/v1.19.8+k3s1/k3s-arm64",
                "K3S_URL=K3S_URL_amd64",
                "CHANNELSERVER_URL_amd64=https://github.com/rancher/channelserver/releases/download/v0.5.0/channelserver-amd64",
                "CHANNELSERVER_URL_arm64=https://github.com/rancher/channelserver/releases/download/v0.5.0/channelserver-arm64",
                "CHANNELSERVER_URL=CHANNELSERVER_URL_amd64",
                "ETCD_URL_amd64=https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz",
                "ETCD_URL_arm64=https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-arm64.tar.gz",
                "ETCD_URL=ETCD_URL_amd64",
                "KUSTOMIZE_URL_amd64=https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_linux_amd64.tar.gz",
                "KUSTOMIZE_URL_arm64=https://github.com/brendarearden/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_linux_arm64.tar.gz",
                "KUSTOMIZE_URL=KUSTOMIZE_URL_amd64",
                "CATTLE_UI_VERSION=2.5.9",
                "CATTLE_DASHBOARD_UI_VERSION=v2.5.8",
                "CATTLE_CLI_VERSION=v2.4.11",
                "CATTLE_API_UI_VERSION=1.1.9",
                "AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log",
                "AUDIT_LOG_MAXAGE=10",
                "AUDIT_LOG_MAXBACKUP=10",
                "AUDIT_LOG_MAXSIZE=100",
                "AUDIT_LEVEL=0",
                "CATTLE_CLI_URL_DARWIN=https://releases.rancher.com/cli2/v2.4.11/rancher-darwin-amd64-v2.4.11.tar.gz",
                "CATTLE_CLI_URL_LINUX=https://releases.rancher.com/cli2/v2.4.11/rancher-linux-amd64-v2.4.11.tar.gz",
                "CATTLE_CLI_URL_WINDOWS=https://releases.rancher.com/cli2/v2.4.11/rancher-windows-386-v2.4.11.zip",
                "CATTLE_SERVER_VERSION=v2.5.9",
                "CATTLE_AGENT_IMAGE=rancher/rancher-agent:v2.5.9",
                "CATTLE_SERVER_IMAGE=rancher/rancher",
                "ETCD_UNSUPPORTED_ARCH=amd64",
                "ETCDCTL_API=3",
                "SSL_CERT_DIR=/etc/rancher/ssl"
            ],
            "Cmd": null,
            "Image": "rancher/rancher",
            "Volumes": {
                "/var/lib/cni": {},
                "/var/lib/kubelet": {},
                "/var/lib/rancher": {},
                "/var/log": {}
            },
            "WorkingDir": "/var/lib/rancher",
            "Entrypoint": [
                "entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.created": "2021-07-15T00:21:24Z",
                "org.opencontainers.image.revision": "3c54189441fdac08fd4a1b3113216e085004f061",
                "org.opencontainers.image.source": "https://github.com/rancher/rancher.git",
                "org.opencontainers.image.url": "https://github.com/rancher/rancher"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "da18b10efe60b7040277baa2e3575d0b8b902af683bcdad7d51ab568ac19dff3",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/da18b10efe60",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "12bf4b4d0eeff1b6e2d02ed7d0da0589ae5c6b67e4cc1ce6a187603ec4b0fb0d",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

#命令
# 方式一
docker exec -it 容器id bashshell
# 方式二
docker attach 容器id 

#测试
docker attach 55321bcae33d 
正在执行当前的代码...

#区别
#docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)
#docker attach # 进入容器正在执行的终端

在这里插入图片描述

从容器内拷贝到主机上

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

在这里插入图片描述
小结:
在这里插入图片描述
命令大全 从A~Z

  attach      Attach local standard input, output, and error streams to a running container
  #当前shell下 attach连接指定运行的镜像
  build       Build an image from a Dockerfile # 通过Dockerfile定制镜像
  commit      Create a new image from a container's changes #提交当前容器为新的镜像
  cp          Copy files/folders between a container and the local filesystem #拷贝文件
  create      Create a new container #创建一个新的容器
  diff        Inspect changes to files or directories on a container's filesystem #查看docker容器的变化
  events      Get real time events from the server # 从服务获取容器实时时间
  exec        Run a command in a running container # 在运行中的容器上运行命令
  export      Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import]
  history     Show the history of an image # 展示一个镜像形成历史
  images      List images #列出系统当前的镜像
  import      Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像
  info        Display system-wide information # 显示全系统信息
  inspect     Return low-level information on Docker objects #查看容器详细信息
  kill        Kill one or more running containers # kill指定docker容器
  load        Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save]
  login       Log in to a Docker registry #
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

作业练习

docker 安装Nginx

#查询当前镜像
yons@yons-X10SRA:/$ sudo docker images
[sudo] yons 的密码: 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB
centos              latest              300e315adb2f        8 months ago        209MB 

#搜索Nginx镜像
yons@yons-X10SRA:/$ sudo docker search nginx
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                             Official build of Nginx.                        15364               [OK]                
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2060                                    [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   816                                     [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   236                                     
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   152                                     
tiangolo/nginx-rtmp               Docker image with Nginx using the nginx-rtmp…   139                                     [OK]
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        132                                     [OK]
alfg/nginx-rtmp                   NGINX, nginx-rtmp-module and FFmpeg from sou…   105                                     [OK]
jasonrivers/nginx-rtmp            Docker images to host RTMP streams using NGI…   92                                      [OK]
nginxdemos/hello                  NGINX webserver that serves a simple page co…   71                                      [OK]
privatebin/nginx-fpm-alpine       PrivateBin running on an Nginx, php-fpm & Al…   56                                      [OK]
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   55                                      
nginxinc/nginx-unprivileged       Unprivileged NGINX Dockerfiles                  46                                      
staticfloat/nginx-certbot         Opinionated setup for automatic TLS certs lo…   24                                      [OK]
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   19                                      
schmunk42/nginx-redirect          A very simple container to redirect HTTP tra…   19                                      [OK]
nginxproxy/nginx-proxy            Automated Nginx reverse proxy for docker con…   18                                      
centos/nginx-112-centos7          Platform for running nginx 1.12 or building …   15                                      
centos/nginx-18-centos7           Platform for running nginx 1.8 or building n…   13                                      
bitwarden/nginx                   The Bitwarden nginx web server acting as a r…   11                                      
flashspys/nginx-static            Super Lightweight Nginx Image                   10                                      [OK]
mailu/nginx                       Mailu nginx frontend                            9                                       [OK]
sophos/nginx-vts-exporter         Simple server that scrapes Nginx vts stats a…   7                                       [OK]
ansibleplaybookbundle/nginx-apb   An APB to deploy NGINX                          2                                       [OK]
wodby/nginx                       Generic nginx                                   1                                       [OK]

#拉取下载镜像 pull
yons@yons-X10SRA:/$ sudo docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
e1acddbe380c: Already exists 
e21006f71c6f: Pull complete 
f3341cc17e58: Pull complete 
2a53fa598ee2: Pull complete 
12455f71a9b5: Pull complete 
b86f2ba62d17: Pull complete 
Digest: sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef
Status: Downloaded newer image for nginx:latest

#下载成功后查看全部镜像
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              dd34e67e3371        7 days ago          133MB
mysql               5.7                 6c20ffa54f86        7 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        5 weeks ago         1.06GB
centos              latest              300e315adb2f        8 months ago        209MB

# 运行测试
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
yons@yons-X10SRA:/$ sudo docker run -d --name nginx01 -p 3344:80 nginx
b6199269814abff2b8fa84ff13c47d258bcc6f6d6efa98fd1108a3a70d1e6222

#查看当前运行的容器
yons@yons-X10SRA:/$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                  NAMES
b6199269814a        nginx               "/docker-entrypoint.…"   15 seconds ago      Up 13 seconds                   0.0.0.0:3344->80/tcp   nginx01
0db996879b02        rancher/rancher     "entrypoint.sh"          2 weeks ago         Restarting (1) 54 seconds ago                          rancher

#进入容器
yons@yons-X10SRA:/$ sudo docker exec -it nginx01 /bin/bash
root@b6199269814a:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@b6199269814a:/# cd /etc/nginx
root@b6199269814a:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params

#退出容器
root@b6199269814a:/etc/nginx# exit
exit

#访问Nginx
yons@yons-X10SRA:/$ sudo curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#停止容器
yons@yons-X10SRA:/$ sudo docker stop nginx01
nginx01

#查看当前运行的容器
yons@yons-X10SRA:/$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                      NAMES
0db996879b02        rancher/rancher     "entrypoint.sh"     2 weeks ago         Up 4 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   rancher
yons@yons-X10SRA:/$ 

外部访问测试
在这里插入图片描述
宿主机端口 和 容器内部端口 以及端口暴露:
在这里插入图片描述
问题:
我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,
我要是可以在容器外部提供一个映射路径,达到在容器外部修改文件名,容器内部就可以自动修改?-v 数据卷 技术!

docker 安装tomcat

# 下载 tomcat9.0
# 之前的启动都是后台,停止了容器,容器还是可以查到, docker run -it --rm 镜像名 一般是用来测试,用完就删除
yons@yons-X10SRA:/$ docker run -it --rm tomcat:9.0
#--rm       Automatically remove the container when it exits 用完即删
#-----------------------------------------------

#搜索镜像
yons@yons-X10SRA:/$ sudo docker search tomcat
[sudo] yons 的密码: 
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3103                [OK]                
tomee                         Apache TomEE is an all-Apache Java EE certif…   92                  [OK]                
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   57                                      [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      30                                      
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              18                                      [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                                      [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                                      [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   11                                      
rightctrl/tomcat              CentOS , Oracle Java, tomcat application ssl…   6                                       [OK]
maluuba/tomcat7-java8         Tomcat7 with java8.                             6                                       
unidata/tomcat-docker         Security-hardened Tomcat Docker container.      5                                                                       

#查看原有镜像
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              dd34e67e3371        8 days ago          133MB
mysql               5.7                 6c20ffa54f86        8 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        6 weeks ago         1.06GB

#分层下载
yons@yons-X10SRA:/$ sudo docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
1cfaf5c6f756: Pull complete 
c4099a935a96: Pull complete 
f6e2960d8365: Pull complete 
dffd4e638592: Pull complete 
a60431b16af7: Pull complete 
4869c4e8de8d: Pull complete 
9815a275e5d0: Pull complete 
c36aa3d16702: Pull complete 
cc2e74b6c3db: Pull complete 
1827dd5c8bb0: Pull complete 
Digest: sha256:1af502b6fd35c1d4ab6f24dc9bd36b58678a068ff1206c25acc129fb90b2a76a
Status: Downloaded newer image for tomcat:latest

#再次查看确认下载成功
yons@yons-X10SRA:/$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              266d1269bb29        7 days ago          668MB
nginx               latest              dd34e67e3371        8 days ago          133MB
mysql               5.7                 6c20ffa54f86        8 days ago          448MB
rancher/rancher     latest              d7329a56a8e4        6 weeks ago         1.06GB

#启动测试
# -d 后台运行
# -p 宿主机端口:容器内部端口 暴露端口
# --name 给容器命名
yons@yons-X10SRA:/$ sudo docker run -d -p 8080:8080 --name tomcat01 tomcat
3df285ffe05f5d1147d1edb58b3c40e2744c1175b75fd2603ea7e7019ffe981d

#启动成功后访问tomcat 
yons@yons-X10SRA:/$ sudo curl localhost:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 ? Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 ? Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.52</h3></body></html>

# 根据容器id进入tomcat容器
yons@yons-X10SRA:/$ sudo docker exec -it 3df285ffe05f5d1 /bin/bash

#列表形式查看文件 查看tomcat容器内部内容:
root@3df285ffe05f:/usr/local/tomcat# ls -l
total 156
-rw-r--r-- 1 root root 18949 Jul 31 04:12 BUILDING.txt
-rw-r--r-- 1 root root  6210 Jul 31 04:12 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Jul 31 04:12 LICENSE
-rw-r--r-- 1 root root  2333 Jul 31 04:12 NOTICE
-rw-r--r-- 1 root root  3372 Jul 31 04:12 README.md
-rw-r--r-- 1 root root  6898 Jul 31 04:12 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Jul 31 04:12 RUNNING.txt
drwxr-xr-x 2 root root  4096 Aug 18 20:48 bin
drwxr-xr-x 1 root root  4096 Aug 26 02:25 conf
drwxr-xr-x 2 root root  4096 Aug 18 20:47 lib
drwxrwxrwx 1 root root  4096 Aug 26 02:25 logs
drwxr-xr-x 2 root root  4096 Aug 18 20:47 native-jni-lib
drwxrwxrwx 2 root root  4096 Aug 18 20:47 temp
drwxr-xr-x 2 root root  4096 Aug 18 20:47 webapps
drwxr-xr-x 7 root root  4096 Jul 31 04:12 webapps.dist
drwxrwxrwx 2 root root  4096 Jul 31 04:12 work

#进入查看webapps 查看发现是空的
root@3df285ffe05f:/usr/local/tomcat# cd webapps
root@3df285ffe05f:/usr/local/tomcat/webapps# ls
root@3df285ffe05f:/usr/local/tomcat/webapps# cd ..
#找到webapps.dis
root@3df285ffe05f:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
#查看webapps.dis目录
root@3df285ffe05f:/usr/local/tomcat# cd webapps.dist
root@3df285ffe05f:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@3df285ffe05f:/usr/local/tomcat/webapps.dist# cd ..
#将webapps.dist下所有文件 拷贝到webapps目录
root@3df285ffe05f:/usr/local/tomcat# cp -r webapps.dist/* webapps     
root@3df285ffe05f:/usr/local/tomcat# cd webapps
#拷贝后确认
root@3df285ffe05f:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
#退出容器
root@3df285ffe05f:/usr/local/tomcat/webapps# exit
exit
#再次访问
yons@yons-X10SRA:/$ sudo curl localhost:8080

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.52</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>
                <span id="nav-examples"><a href="/examples/">Examples</a></span>
                <span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
                <span id="nav-lists"><a href="https://tomcat.apache.org/lists.html">Mailing Lists</a></span>
                <span id="nav-help"><a href="https://tomcat.apache.org/findhelp.html">Find Help</a></span>
                <br class="separator" />
            </div>
             ....
                <br class="separator" />
            </div>
            <p class="copyright">Copyright &copy;1999-2021 Apache Software Foundation.  All Rights Reserved</p>
        </div>
    </body>
</html>

这样docker部署tomcat就可以访问了
在这里插入图片描述
总结
发现问题:1、linux命令少了。 2.webapps目录为空
原因:阿里云镜像的原因,阿里云默认是最小的镜像,所以不必要的都剔除掉
保证最小可运行的环境!
解决方案:
将webapps.dist下的文件都拷贝到webapps下即可

问题:
我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?要是可以在容器外部提供一个映射路径,比如webapps,我们在外部放置项目,就自动同步内部就好了!

docker部署elasticsearch+kibana

本人没有亲测

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

# 启动elasticsearch
yons@yons-X10SRA:/$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 测试一下es是否成功启动
➜  ~ curl localhost:9200
{
  "name" : "d73ad2f22dd3",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "atFKgANxS8CzgIyCB8PGxA",
  "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"
}

#测试成功就关掉elasticSearch,防止耗内存
yons@yons-X10SRA:/$ docker stop d834ce2bd306
d834ce2bd306

# 查看docker容器使用内存情况
yons@yons-X10SRA:/$ docker stats  

在这里插入图片描述

#测试成功就关掉elasticSearch,可以添加内存的限制,修改配置文件 -e 环境配置修改
➜  ~ docker rm -f d73ad2f22dd3            # stop命令也行                               
➜  ~ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

在这里插入图片描述
问题:
使用kibana连接es (elasticSearch)?思考网络如何才能连接
在这里插入图片描述

可视化

先了解Portainer

# 安装命令
docker run -d -p 8080:9000 \
> --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
d1e017099d17: Pull complete 
a7dca5b5a9e8: Pull complete 
Digest: sha256:4ae7f14330b56ffc8728e63d355bc4bc7381417fa45ba0597e5dd32682901080
Status: Downloaded newer image for portainer/portainer:latest
81753869c4fd438cec0e31659cbed0d112ad22bbcfcb9605483b126ee8ff306d

测试访问: 8080 :http://ip:8080/
在这里插入图片描述
Rancher(ci/cd一般使用)

dokcer镜像讲解

镜像是什么

镜像是一种轻量级、可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。
所有应用,直接打包docker镜像,就可以直接跑起来!

如何得到镜像
从远程仓库下载
别人拷贝给你
自己制作一个镜像 DockerFile

docker镜像加载原理

   UnionFs (联合文件系统)

UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( unite several directories into a single virtual filesystem)。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

   Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel, Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。这一层与我们典型的Linux/Unix系统是一样的,包含boot加載器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。
在这里插入图片描述
平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?
在这里插入图片描述
对于个精简的OS,rootfs可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版, boots基本是一致的, rootfs会有差別,因此不同的发行版可以公用bootfs.
虚拟机是分钟级别,容器是秒级!

思考:为什么Docker镜像要采用这种分层的结构呢?

最大的好处,我觉得莫过于资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

查看镜像分层的方式可以通过docker image inspect 命令

在这里插入图片描述
理解
所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之上,创建新的镜像层。
举一个简单的例子,假如基于 Ubuntu Linux16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python包,
就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创健第三个镜像层该像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。
在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合,理解这一点.
在这里插入图片描述
特点
Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
在这里插入图片描述

commit镜像

#命令
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# 1、启动一个默认的tomcat
docker run -d -p 8080:8080 tomcat

# 2、发现这个默认的tomcat 是没有webapps应用,官方的镜像默认webapps下面是没有文件的!
#docker exec -it 容器id /bin/bash
docker exec -it de57d0ace571 /bin/bash

# 3、从webapps.dist拷贝文件进去webapp
cp -r webapps.dist/* webapps
cd webapps
ls
ROOT  docs  examples  host-manager  manager

# 4、将操作过的容器通过commit调教为一个镜像!我们以后就使用我们修改过的镜像即可,而不需要每次都重新拷贝webapps.dist下的文件到webapps了,这就是我们自己的一个修改的镜像。
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0

docker commit -a="csp提交的" -m="add webapps app" de57d0ace571 tomcat02.1.0

docker images

在这里插入图片描述
如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比我们我们使用虚拟机的快照。

恭喜你到此你已经入门成功!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值