关于Docker的一些事--Docker部署以及常用的命令

Docker部署

 

docker的基本构成

 

 

 可能图片有点模糊。。。

从左到右:

客户端、docker主机、远程仓库

镜像  image

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务

容器  container

Docker利用容器技术.独立运行一个或者一个组应用 ,通过镜像来创建的。目前就可以把这个容器理解为就是一个简易的linux系统.

仓库  repository

仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库。

 

搭建前提

 内核版本需要达到3.10以上的

 centos7系统及以上或者ubuntu等系统内核要求达到3.10

3GB内存及以上、处理器四核心及以上(推荐,非必须)

 Xshell/Finalshell远程软件

 FTP环境搭建

 需要了解的知识

 基础linux操作

 git&githab基础

 计算机网络技术(ccna级别及以上)

 一点点shell编程

 

开始部署

 

卸载旧的版本(要对旧版本上所有镜像进行备份记得)

 yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

 

安装新版本docker

yum仓库安装方案

下载必要的环境

yum -y install device-mapper-persistent-data lvm2

下载docker国内源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

若提示 yum-config-mananger没有这个命令 试试如下方法

yum -y install yum-utils

更新yum

yum makecache

安装docker

yum install docker-ce docker-ce-cli containerd.io

要安装自定义的版本需要做的

查看现有的版本

yum list docker-ce --showduplicates | sort -r

 

 

 

 

 

下载你喜欢的版本

yum -y install install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

 

将docker加入开机启动然后启动下docker

[root@kllmkadx ~]#systemctl enable docker.service && systemctl start docker.servic

查看docker运行状态

[root@kllmkadx ~]#systemctl status docker.service

[root@kllmkadx ~]#docker version

这个提示说明安装成功了

[root@localhost ~]#docker version

Client: Docker Engine - Community

 Version:           20.10.6

 API version:       1.41

 Go version:        go1.13.15

 Git commit:        370c289

 Built:             Fri Apr  9 22:45:33 2021

 OS/Arch:           linux/amd64

 Context:           default

 Experimental:      true

 

Server: Docker Engine - Community

并且测试一下docker

若安装异常提示

inotify_add_watch(7, /dev/dm-4, 10) failed: No such file or directory

解决方案:

yum update xfsprogs -y

这个提示的话

2021-05-25 19:24:23 ERROR: COMMAND_FAILED: '/sbin/iptables -t filter -C FORWA

只需要关闭防火墙和selinux就好了

 

卸载的话

yum remove docker-ce docker-ce-cli containerd.io

rm -rf /var/lib/docker && rm -rf /var/lib/containerd

 

在使用docker前,配置一个镜像加速是非常必要的

优化下docker下载速度

[root@localhost docker]#tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]

}

EOF

 

{

  "registry mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]

}

[root@localhost docker]#systemctl daemon-reload

[root@localhost docker]#systemctl restart docker

 

 

 

 

Docker常用的命令

 

基本管理命令

docker默认资源路径     /var/lib/docker       /var/lib/containerd

查看docker版本

[root@localhost ~]# docker version

Client: Docker Engine - Community

 Version:           20.10.6

 API version:       1.41

 Go version:        go1.13.15

 Git commit:        370c289

 Built:             Fri Apr  9 22:45:33 2021

 OS/Arch:           linux/amd64

 Context:           default

 Experimental:      true

 

Server: Docker Engine - Community

 Engine:

  Version:          20.10.6

  API version:      1.41 (minimum version 1.12)

  Go version:       go1.13.15

  Git commit:       8728dd2

  Built:            Fri Apr  9 22:43:57 2021

  OS/Arch:          linux/amd64

  Experimental:     false

 containerd:

  Version:          1.4.4

  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e

 runc:

  Version:          1.0.0-rc93

  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec

 docker-init:

  Version:          0.19.0

  GitCommit:        de40ad0

 

查看docker更加详细的信息(系统方面)

[root@localhost ~]#docker info

其中有价值的信息:有关虚拟机方面的信息 运行了多少个 停止了多少个 有多少个镜像啊 等等

 

镜像命令

查看docker现存的镜像

[root@localhost ~]#docker images

REPOSITORY   TAG       IMAGE ID   CREATED     SIZE

镜像仓库源   标签       镜像id     创建时间   大小

nginx        latest    f0b8a9a54136   13 days ago    133MB

centos       latest    300e315adb2f   5 months ago   209MB

 

 

docker images [选项][存储库[:标记]]

全拼               简写                含义

--all                -a                  显示所有镜像(默认隐藏中间的镜像)

--digests                                显示摘要

--quiet             -q                                以ID号的形式显示镜像

--filter              -f                       根据提供的条件过滤输出镜像

 

搜索镜像

[root@localhost ~]# docker search mysql

NAME                              DESCRIPTION                                     STARS       OFFICIAL    AUTOMATED

名称                               说明                                            收藏       是否官方    支持自动化么

mysql                             MySQL is a widely used, open-source relation…           10916        [OK]      

mariadb                           MariaDB Server is a high performing open sou…           4122         [OK]      

mysql/mysql-server                  Optimized MySQL Server Docker images. Create…          810                      [OK]

 

选项:

全拼               简写                含义

--filter filter          -f                  根据提供的条件过滤输出

--limit int                               限制最大展示数 (默认显示25行)

 

 

 

拉取镜像

docker pull [选项] 镜像名称[:版本]

如果不写版本,默认下载的是最后一个版本

版本是不能随意填写的,只有官方存在的才可以被允许下载,不然出问题

docker一般以分层下载的方式进行下载,这个是docker最重要的地方

范例

下载一个8.0.25版本的mysql镜像

 

 

[root@localhost ~]# docker pull mysql:8.0.25

8.0.25: Pulling from library/mysql

69692152171a: Already exists

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:8.0.25

docker.io/library/mysql:8.0.25

验证是否下载成功呢?

 

 

删除镜像

[root@localhost ~]# docker rmi -f 镜像id/镜像名称

例如

[root@localhost ~]# docker rmi -f 300e315adb2f

删除全部容器

[root@localhost ~]# docker rmi -f $(docker images -aq)

 查看cpu的状态

[root@localhost ~]# docker stats

CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O       PIDS

66969d3024ae   elasticsearch2   0.54%     577.8MiB / 1.784GiB   31.63%    648B / 600B   128MB / 3.7MB   0

 

容器命令

有了镜像才可以使用容器

启动一个docker

docker run xxx

注意,如果docker本地库没有这个镜像的话那么,它会从云端下载一个docker仓库镜像进行下载并让你使用

docker run工作流程

 

 

基本格式

docker run [可选参数] 镜像名称

全拼                              简写                含义

--name=”name”                                       给容器命名

-d                                                  以后台形式运行容器

-it                                                  使用交互方式运行,进入容器查看内容

-P                                                  指定端口(固定的)

四种使用方式

-P 主机端口:容器端口    (常用) 理解就是docker的容器端口NAT映射到主机端口的多少多少

-P 容器端口

-P ip:主机端口

-p  随机指定端口

 

入门引入

启动并进入容器

[root@localhost ~]# docker run --name "abc" -it centos:7.9.2009 /bin/bash

[root@3400a3cc0910 /]# ls

发现终端的名称已经发生了变化

退出容器

[root@3400a3cc0910 /]# exit

exit

列出运行中的容器

[root@localhost /]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

查看运行中的容器(包含历史运行的容器)

[root@localhost /]# docker ps -a

CONTAINER ID   IMAGE             COMMAND       CREATED              STATUS                          PORTS     NAMES

79172d68a8a4   centos:7.9.2009   "/bin/bash"   About a minute ago   Exited (0) About a minute ago             Test

3400a3cc0910   centos:7.9.2009   "/bin/bash"   8 minutes ago        Exited (0) 5 minutes ago                  abc

2a0ffa1be209   centos            "/bin/bash"   9 minutes ago        Exited (0) 9 minutes ago                  agitated_mendel

643d1110bfa5   centos:7.9.2009   "/bin/bash"   10 minutes ago       Exited (0) 10 minutes ago                 angry_bhaskara

 

显示最近创建的容器

docker ps -a -n=(数字个数)

范例显示最近创建过的2个容器

[root@localhost /]# docker ps -a -n=2

CONTAINER ID   IMAGE             COMMAND       CREATED          STATUS                     PORTS     NAMES

79172d68a8a4   centos:7.9.2009   "/bin/bash"   5 minutes ago    Exited (0) 5 minutes ago             Test

3400a3cc0910   centos:7.9.2009   "/bin/bash"   13 minutes ago   Exited (0) 9 minutes ago             abc

 

显示所有容器的编号

-q 仅仅显示编号

范例:显示最近创建的2个容器并以编号显示

[root@localhost /]# docker ps -aq -n=2

79172d68a8a4

3400a3cc0910

 

退出容器

exit       直接容器停止

ctrl+P+Q   容器不停止退出

 

范例:

创建两个容器,一个是abc一个是bbc,创建后彻底停止A,不过因为业务需要B就不要停止了

[root@localhost /]# docker run --name "abc" -it centos /bin/bash

[root@25bef05c5fd2 /]# exit

exit

[root@localhost /]# docker run --name "bbc" -it centos /bin/bash

[root@00410f23291b /]# [root@localhost /]# ls

验证

[root@localhost /]# docker ps -a

CONTAINER ID   IMAGE             COMMAND       CREATED              STATUS               PORTS     NAMES

00410f23291b   centos            "/bin/bash"   About a minute ago   Up About a minute                         bbc

25bef05c5fd2   centos            "/bin/bash"   About a minute ago   Exited (0) About a minute ago                 abc

 

删除容器

rm命令

[root@localhost /]# docker rm 5a6157fb6a127f3a922ac8e2c7b163803ce05ccdf5429dca63df2574b66a336d

5a6157fb6a127f3a922ac8e2c7b163803ce05ccdf5429dca63df2574b66a336d

注意

不能删除正在运行的容器,若强制删除不要可以加rm -f命令进行操作

[root@localhost /]# docker rm -f $(docker ps -aq)

00410f23291b

终于把bbc给干掉了

 

启动和停止容器的操作

docker start 容器id     开启容器

docker restart 容器id   重启容器

docker stop 容器id   停止运行的容器

docker kill 容器id    强制停止容器

 

进入一个正在允许的容器

[root@localhost /]# docker exec -it 2b03976b0a4d /bin/bash

常用的其他命令

查看日志

docker logs [OPTIONS] CONTAINER

Options:

--details        显示提供给日志的额外详细信息

--follow,-f,       跟踪日志输出

--since string     显示自时间戳(例如2013-01-02T13:23:37Z)或相对时间戳(例如42分钟的42m)后的日志

--tail string,     从日志行数尾部开始显示日志(默认为“all”)

--timestamps-t,   显示时间戳

--until string    在时间戳(例如2013-01-02T13:23:37Z)或相对时间戳(例如42分钟42米)之前显示日志

范例

[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo "helloworld";sleep 2;done"

e02a60aec0bdc7bc3f9f1c3bcaa4853fd3ae4c7654a6049515d05dbe37dffea1

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES

e02a60aec0bd   centos    "/bin/sh -c 'while t…"   7 seconds ago   Up 6 seconds             adoring_sammet

[root@localhost ~]# docker logs -tf --tail 10 e02a60aec0bd

2021-05-25T17:10:23.244118070Z helloworld

2021-05-25T17:10:25.246956771Z helloworld

2021-05-25T17:10:27.282731018Z helloworld

 

发现已经成功的产生了日志

当容器停止,相应的日志也会停止

但是,当容器再次启动起来了,那么日志会照旧的滚动

像这样

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES

e02a60aec0bd   centos    "/bin/sh -c 'while t…"   3 minutes ago   Up 3 minutes             adoring_sammet

[root@localhost ~]# docker stop e02a60aec0bd

e02a60aec0bd

[root@localhost ~]# docker start e02a60aec0bd

e02a60aec0bd

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES

e02a60aec0bd   centos    "/bin/sh -c 'while t…"   4 minutes ago   Up 6 seconds             adoring_sammet

[root@localhost ~]# docker logs -tf -tail 2 e02a60aec0bd

unknown shorthand flag: 'a' in -ail

See 'docker logs --help'.

[root@localhost ~]# docker logs -tf --tail 10  e02a60aec0bd

2021-05-25T17:15:25.418411956Z helloworld

2021-05-25T17:15:27.421545514Z helloworld

2021-05-25T17:15:29.425255134Z helloworld

2021-05-25T17:15:31.427698883Z helloworld

 

无缝切换啊,哈哈哈

 

 

 

 

查看容器中进程信息 top命令

[root@localhost ~]# docker top e02a60aec0bd

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD

root                64536               64509               0                   01:14               ?                   00:00:00            /bin/sh -c while true;do echo helloworld;sleep 2;done

root                76823               64536               0                   01:21               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2

 

查看镜像的元数据

[root@localhost ~]# docker inspect e02a60aec0bd

从容器内拷贝到本机

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

范例

[root@localhost ~]# docker run -it centos /bin/bash

[root@ca262082996a /]# [root@localhost ~]# touch abc.pdf

[root@localhost ~]# docker attach ca262082996a

[root@ca262082996a /]# touch banc.pdf

[root@ca262082996a /]# exit

发现已经退出了容器(但此时容器并没有消失,可以随时开启并且数据完全在的)

此处经过园友的更正有些问题 正确的描述是 发现已经退出了容器(容器消失,不可以随时开启并且数据消失了)

# 将容器内的banc.pdf重要数据拷贝出docker宿主服务器的根目录下,发现已经成了

[root@localhost ~]# docker cp ca262082996a:/banc.pdf /root

[root@localhost ~]# ls

abc.pdf  anaconda-ks.cfg  banc.pdf

 

附录:思维导图

 

 

 

 

可视化UI部署

 

[root@localhost ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

 

第一次需要设置密码

 

然后选择本地

 

最后的界面是这样的

 

 

 

简约对不对,哈哈!

 

posted @ 2022-11-09 11:05  FlySkyZero  阅读(375)  评论(2编辑  收藏  举报