Docker

安装

  1. 环境查看(系统内核)
[root@gailejiubushizhanan ~]# uname -r
4.18.0-348.7.1.el8_5.x86_64
  1. 系统版本
[root@gailejiubushizhanan ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
  1. 安装 使用yum安装过程中如果centos版本为7以上即8,可能出现报错问题,解决方法如下: yum报错解决
#1.卸载旧的Docker版本
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2.安装Docker需要的环境依赖(安装包)
 sudo 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软件包索引
yum makecache(centos7)
yum makecache(centos8)
# 4.安装docker相关的内容(引擎)docker-ce社区版 ee企业版
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
#5.查看docker是否安装成功或启动成功
docker version
#6.启动docker
systemctl start docker

docker version

#7.通过跑hello world镜像判定docker引擎是否安装成功
docker run hello-world

启动hello-world镜像

#8.查看hello-world镜像
[root@gailejiubushizhanan yum.repos.d]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   9 months ago   13.3kB

卸载

#卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
#删除资源(目录)
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
#/var/lib/docker docker的默认工作路径

阿里云镜像加速

  1. 登陆阿里云找到“容器服务” 登陆阿里云

  2. 找到镜像加速地址 镜像加速器

  3. 配置使用

#新建目录docker
sudo mkdir -p /etc/docker
#配置demoan.json配置镜像地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ys33xwjr.mirror.aliyuncs.com"]
}
EOF
#重启镜像
sudo systemctl daemon-reload
#重启docker
sudo systemctl restart docker

HelloWorld流程

DockerRun流程图

底层原理

Docker是怎么工作的?

Docker是一个client-server结构的系统,Docker的守护进程运行在主机上(宿主机),通过Socket从客户端访问。 DockerServer接收到Docker-Client的指令,就会执行这个命令。 Docker工作流程图 Docker为什么比VM快

  1. docker有着比虚拟机更少的抽象层
  2. docker是利用宿主机的内核,vm需要的是Guest OS. Docker与VM对比图 也就是说,在新建一个应用的时候,docker不需要像VM那样重新加载一个操作系统的内核,避免引导操作,虚拟机是加载Guest OS,是分钟级别的,而docker是依赖宿主机的操作系统,即Host OS,省略了这个复杂的过程,是秒级的!

GuestOS:VM(虚拟机)里的的系统(OS);

HostOS:物理机里的系统(OS);

Docker常用命令

帮助命令

docker version			# 显示docker的版本信息
docker info				# 显示docker的系统信息。包括镜像和容器的数量
docker 命令 --help	  # 万能命令 帮助命令 例如:docker images --help或 docker tag --help

帮助文档地址: 帮助文档地址

镜像命令

docker images

[root@gailejiubushizhanan wuyi]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   9 months ago   13.3kB
# 解释
REPOSITORY 	镜像的仓库源
TAG			镜像的标签
IMAGE ID	镜像的ID
CREATED		镜像的创建时间
SIZE		镜像的大小
# 可选项
Options:
  -a, --all             Show all images (default hides intermediate images)	#列出所有的镜像
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image ID									# 只显示镜像的ID 

docker search搜索镜像

[root@gailejiubushizhanan wuyi]# docker search mysql
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                          MySQL is a widely used, open-source relation…   12767     [OK]       
mariadb                        MariaDB Server is a high performing open sou…   4905      [OK]       
percona                        Percona Server is a fork of the MySQL relati…   579       [OK]       
phpmyadmin                     phpMyAdmin - A web interface for MySQL and M…   557       [OK]       
bitnami/mysql                  Bitnami MySQL Docker Image                      71                   [OK]
linuxserver/mysql-workbench                                                    37                   
linuxserver/mysql              A Mysql container, brought to you by LinuxSe…   35                   
ubuntu/mysql                   MySQL open source fast, stable, multi-thread…   34                   
circleci/mysql                 MySQL is a widely used, open-source relation…   26                   
google/mysql                   MySQL server for Google Compute Engine          21                   [OK]
rapidfort/mysql                RapidFort optimized, hardened image for MySQL   13                   
bitnami/mysqld-exporter                                                        3                    
ibmcom/mysql-s390x             Docker image for mysql-s390x                    2                    
nasqueron/mysql                                                                1                    [OK]
newrelic/mysql-plugin          New Relic Plugin for monitoring MySQL databa…   1                    [OK]
vitess/mysqlctld               vitess/mysqlctld                                1                    [OK]
#可选项 通过收藏来过滤
--filter=STARS=3000			搜索出来的镜像就是STARS大于3000的
[root@gailejiubushizhanan wuyi]# docker search mysql -f=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12767     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4905      [OK]       
[root@gailejiubushizhanan wuyi]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12767     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4905      [OK]  

docker pull下载镜像

# 下载镜像 docker pull 镜像名[:tag]			中括号代表可选
[root@gailejiubushizhanan wuyi]# docker pull mysql
Using default tag: latest	# 如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 	# 分层下载,docker image的核心 联合文件系统
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

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

# 指定版本下载
[root@gailejiubushizhanan wuyi]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists 
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
# PS:联合文件系统是在分层下载的时候,可能用到之前下载过的层级内容,这时候则不需要重新下载,可以复用

docker rmi删除镜像!

[root@gailejiubushizhanan wuyi]# docker rmi -f 容器ID	# 删除指定的镜像
[root@gailejiubushizhanan wuyi]# docker rmi -f 容器ID 容器ID 容器ID	# 删除多个镜像
[root@gailejiubushizhanan wuyi]# docker rmi -f $(docker images -aq)	# 删除全部的镜像

docker save保存镜像

docker save 镜像名/镜像ID -o 镜像路径及镜像名
docker save tomcat -o /mytomcatimg.tar

docker load加载镜像

docker load -i 镜像路径

docker login登陆docker仓库(推送镜像前需要先登陆镜像仓库)

docker login --username=镜像仓库用户名 镜像仓库实例地址	#如果不填实例地址默认登陆Dockerhub
ps:windows系统命令为winpty docker login

docker logout登出

docker build构建镜像

docker build -f Dockerfile # -f指定dockerfile文件路径及文件名 若文件名为Dockerfile,并在当前目录可用.替换
docker build .

docker tag给镜像打标签

docker tag 源镜像名:[镜像版本号] 新的镜像名:[镜像版本号] #镜像名组成:镜像实例地址/空间名/仓库名(镜像名)
#通常会把docker build 和docker tag连用,如下:
docker build . -t 镜像名:[镜像版本号]	#意思是根据当前目录下的Dockerfile将项目打成镜像并命名镜像,同时镜像打上tag

docker push推送镜像至镜像仓库

docker push 镜像名:[镜像版本号]

docker commit可以将指定的容器封装成一个镜像

#-m="提交信息" -a="作者信息"
docker commit -m="gitlab初始化" -a="无法长大" 容器ID/容器名 封装后的镜像名:[镜像版本号]

容器命令

有了镜像才能创建容器

docker pull centos

新建容器并启动

docker run [可选参数] image

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

# 测试	启动并进入容器 如果是alpine制作的镜像 /bin/bash需要替换成 /bin/sh
[root@gailejiubushizhanan wuyi]# docker run -it centos /bin/bash
[root@f5419ddcba65 /]# ls	# 查看容器内的centos,基础版本, 很多命令都不完善
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器中退回主机
[root@d43530d2a88a /]# exit
exit
[root@gailejiubushizhanan /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出所有运行的容器

# docker ps 命令
-a	#列出当前正在运行的容器+带出历史运行过的容器
-n=?	# 显示最近创建的容器
-q	# 只显示容器的编号

[root@gailejiubushizhanan /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@gailejiubushizhanan /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                     PORTS     NAMES
d43530d2a88a   centos         "/bin/bash"   3 minutes ago    Exited (0) 3 minutes ago             adoring_kepler
f5419ddcba65   centos         "/bin/bash"   13 minutes ago   Exited (0) 4 minutes ago             boring_goldberg
8b87da3b707e   feb5d9fea6a5   "/hello"      24 hours ago     Exited (0) 24 hours ago              upbeat_davinci

退出容器

exit	# 直接停止容器 并退出
ctrl + p + q	# 容器不停止退出

删除容器

docker rm 容器id						# 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
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@gailejiubushizhanan /]# docker run -d centos
# docker ps,发现centos 停止了
# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx服务, 容器启动后,发现自己没有提供服务,就会立刻停止,就没有程序了

查看日志

# 用容器去跑脚本 (不停的启动)
[root@gailejiubushizhanan /]# docker run -d centos /bin/bash -c "while true;do echo dogyi;sleep 1;done"

[root@gailejiubushizhanan /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
fe57e0312e29   centos    "/bin/bash -c 'while…"   3 seconds ago   Up 2 seconds             awesome_kare
3f857075c75c   centos    "/bin/bash"              6 minutes ago   Up 6 minutes             blissful_keldysh

# 显示日志
-tf				# 显示日志
--tail number	# 要显示的日志条数
[root@gailejiubushizhanan /]# docker logs -tf --tail 10 fe57e0312e29

查看容器中的进程信息

# 命令 docker top 容器ID
[root@gailejiubushizhanan /]# docker top fe57e0312e29
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11799               11779               0                   14:57               ?                   00:00:00            /bin/bash -c while true;do echo dogyi;sleep 1;done
root                13078               11799               0                   15:16               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看容器元数据

# 命令 docker inspect 容器ID
[root@gailejiubushizhanan /]# docker inspect fe57e0312e29
[
    {
        "Id": "fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0",
        "Created": "2022-06-28T06:57:03.447616977Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo dogyi;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 11799,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-06-28T06:57:03.832198668Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0/hostname",
        "HostsPath": "/var/lib/docker/containers/fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0/hosts",
        "LogPath": "/var/lib/docker/containers/fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0/fe57e0312e29f67d431da9eb40a587196495b8ace97679830430f98af11d5ed0-json.log",
        "Name": "/awesome_kare",
        "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/ca5bbe8e46737f973b4c3caaaf54679fcefa35835052ca8989045a71849fb0e3-init/diff:/var/lib/docker/overlay2/76a198e35108e465305e42bc93d3a3a2b78605c1ff71f5fc4034b827116e83cf/diff",
                "MergedDir": "/var/lib/docker/overlay2/ca5bbe8e46737f973b4c3caaaf54679fcefa35835052ca8989045a71849fb0e3/merged",
                "UpperDir": "/var/lib/docker/overlay2/ca5bbe8e46737f973b4c3caaaf54679fcefa35835052ca8989045a71849fb0e3/diff",
                "WorkDir": "/var/lib/docker/overlay2/ca5bbe8e46737f973b4c3caaaf54679fcefa35835052ca8989045a71849fb0e3/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "fe57e0312e29",
            "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 dogyi;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "30d4bdf7307108c9b2c69c3e3a3776b4e0d450339713314d58dfaafd4f747dbf",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/30d4bdf73071",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "886638246b686bcf0c3933aed09a680d6fb76e260a1216e1233bb86ed6b251d0",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "e8131804e44fc90670fbe7909eb74d6663d03c2293ef4d7ec695fb2b82a23d64",
                    "EndpointID": "886638246b686bcf0c3933aed09a680d6fb76e260a1216e1233bb86ed6b251d0",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

**进入当前正在运行的容器

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

# 命令 -it表示以交互的方式执行 bashShell(/bin/bash)
docker exect -it 容器id bashShell

# 测试
[root@gailejiubushizhanan /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
fe57e0312e29   centos    "/bin/bash -c 'while…"   37 minutes ago   Up 37 minutes             awesome_kare
3f857075c75c   centos    "/bin/bash"              43 minutes ago   Up 43 minutes             blissful_keldysh
[root@gailejiubushizhanan /]# docker exec -it fe57e0312e29 /bin/bash
[root@fe57e0312e29 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@fe57e0312e29 /]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 06:57 ?        00:00:00 /bin/bash -c while true;do echo dogyi;sleep 1;done
root        2299       0  0 07:35 pts/0    00:00:00 /bin/bash
root        2320       1  0 07:35 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root        2321    2299  0 07:35 pts/0    00:00:00 ps -ef


# 方式二
docker attach 容器id
# 测试
[root@gailejiubushizhanan /]# docker attach fe57e0312e29
正在执行当前的脚本...


# docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach 进入容器正在执行的终端,不会启动新的终端(进程)

从容器拷贝文件到主机上

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

# 测试
[root@gailejiubushizhanan home]# docker run -it centos /bin/bash
[root@4b87423ec9f6 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@4b87423ec9f6 /]# cd /home/
[root@4b87423ec9f6 home]# ls
# 在容器内新建文件test.java
[root@4b87423ec9f6 home]# touch test.java
[root@4b87423ec9f6 home]# ls
test.java
[root@4b87423ec9f6 home]# exit
exit

# 将这个文件从容器拷贝到主机上
[root@gailejiubushizhanan home]# docker cp 4b87423ec9f6:/home/test.java /home
[root@gailejiubushizhanan home]# ls
admin  db2fencl  db2instl  esuser  fitech_report  fitech_reportbasePath  kibana  software  test.java  wuyi

# 拷贝是一个手动过程,未来我们使用 -v 卷的技术 可以实现自动同步

小结

docker command diagram

docker ps	# 查看当前正在运行的容器
docker ps -a	# 查看所有状态的容器

Docker安装Nginx

# 1.搜索nginx镜像 建议去官方的docker hub上搜索,可以看到更多帮助文档信息
# 2.拉取镜像 pull

[root@gailejiubushizhanan home]# docker run -d --name nginx3344 -p 3344:80 nginx
7cbb1df865bab32eb64b00041ca1d913ac57a50be2718181fea8fd800ace4c71

# -d 表示在后台启动,即不会进入容器并开启容器的终端
# --name 给容器起别名
# -p 给容器指定端口 3344代表服务器端口(宿主机) 80代表容器内的端口
# nginx镜像名称

[root@gailejiubushizhanan home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
7cbb1df865ba   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx3344
[root@gailejiubushizhanan home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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>

端口暴露的概念 docker端口暴露

部署es + kibana
# es暴露的端口很多!
# es十分的耗内存
# es的数据一般需要放置到安全目录!挂载

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag

# docker stats查看docker运行状态
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O       PIDS
1fa8c8e4b8b2   elasticsearch     0.47%     2.061GiB / 3.497GiB   58.92%    2.51kB / 1.07kB   553MB / 504kB   56
31eb511246c8   rabbitmq-docker   0.20%     115.7MiB / 3.497GiB   3.23%     716kB / 2.25MB    249MB / 187kB   25

# 因为ES的运行十分占用内存,所以可以通过修改配置文件来限制内存,命令 -e
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.2.3
# 再使用docker stats查看状态
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O        PIDS
6acdd0204021   elasticsearch     0.57%     474.1MiB / 3.497GiB   13.24%    40.6MB / 156kB   146MB / 84.3MB   63
31eb511246c8   rabbitmq-docker   0.75%     120.3MiB / 3.497GiB   3.36%     716kB / 2.25MB   303MB / 187kB    25

# 使用curl 查看服务
curl localhost:9200 # 如果发现请求返回空服务,需要进入容器修改elasticsearch.yml配置文件中的 xpack.security.enabled的值将true->false,如果无法使用vim,则执行以下命令进入容器下载vim
docker exec -u 0 -it 容器id /bin/bash
apt-get update
apt-get install -y vim

# 修改好后 重启容器
docker restart 容器ID

[root@gailejiubushizhanan ~]# curl localhost:9200
{
  "name" : "6acdd0204021",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "W9bBWPvHR3WNX0p6kYyhZw",
  "version" : {
    "number" : "8.2.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "9905bfb62a3f0b044948376b4f607f70a8a151b4",
    "build_date" : "2022-06-08T22:21:36.455508792Z",
    "build_snapshot" : false,
    "lucene_version" : "9.1.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

可视化

  • portainer(先使用这个)
  • Rancher(CI/CD 持续集成 持续部署)

portainer Docker图形化界面管理工具

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

# -v挂载 宿主机目录:容器目录
# --privileged=true 授权可访问
# portainer/portainer:latest 下载安装