关于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
第一次需要设置密码
然后选择本地
最后的界面是这样的
简约对不对,哈哈!