docker day01

docker:

是一个容器管理工具。podman,pouch,lxc,rkt,...

2013开源 ---> iT福音 ---> 2015~

coreOs ---> Redhat ---> IBM

什么是容器:

生活中装东西的,比如水杯,碗,水缸,鱼缸,...

在计算机中,容器装的就是文件,只不过这些文件是一类程序,包括该程序依赖的库文件。

LINUX内核: (2007年)

NameSpace:

实现资源隔离,包括但不限于网络,文件系统,进程...

Cgroup:

资源限制的。

chroot:

更改根目录,可以手动将一个目录指定为一个根目录。

overlayFs:

联合文件系统。

docker daemon---> lxc ---> container

docker daemon ---> runc ---> container

docker和K8S有啥关系?

docker:

容器管理工具。13年开源。使得容器开始热度较高... "docker inc "

logo ---> 小船。

2014年底: 开始做集群编排:"docker swarm"

----> OCI --- runc

2017年底: docker完败...

docker daemon ---> containerd ---> containerd-ship ---> runc ---> 容器。

containerd ---> CNCF

2019年无奈被收购... M()

K8S:

容器编排工具,14年6月左右开源。"Google" ---> 底层采用docker作为容器运行时,可以以集群的方式工作。

logo ---> 船舵

15年 ---> CRI ----> docker 不支持,由Google工程师们来维护"dockershim"

... CNCF (Google,Redhat,....华为,腾讯,阿里....)

containerd 不支持 CRI ---> Google,Redhat,docker inc 华为,.... ---> containerd 支持CRI

20年 ---> 未来在K8S 1.22+后将尝试移除docker运行时。1.24版本中,默认使用了containerd容器运行时。

centos ---> ubuntu ---- (麒麟) ---> alpine

centos7.X ... 内核旧 ...

centos stream ...

ubuntu ---> 内核新

师夷长技以制夷 ......

部署docker:

(1)卸载旧版本的docker环境

yum -y remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

(2)添加docker的软件源

curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

(3)安装docker-ce软件包

yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

(4)启动docker服务并设置开机自启动

systemctl --now enable docker

(5)查看docker的版本信息

docker version

(6)测试docker环境是否安装成功,如上图所示。

docker run hello-world

温馨提示:

(1)查看docker的现有版本

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

(2)安装docker指定的版本语法

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

快速部署:

1)内网下载软件包

wget http://192.168.11.253/Docker/day01-老男孩教育-docker环境部署,镜像管理及容器管理实战案例/softwares/oldboyedu-docker-ce-20_10_17.tar.gz

2)安装docker-ce软件包

tar xf oldboyedu-docker-ce-20_10_17.tar.gz && cd docker-ce-20_10_17 && yum -y localinstall *.rpm

3)开启docker的自动补全功能

source /usr/share/bash-completion/bash_completion

4)配置docker镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": "https://tuv7rqqq.mirror.aliyuncs.com"

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

docker info

参考链接:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

5)测试docker是否安装成功

docker run hello-world

6)彩蛋时刻

docker run --restart unless-stopped -dp 80:80 jasonyin2020/oldboyedu-games:v0.2

参考链接:

https://hub.docker.com/r/jasonyin2020/oldboyedu-games

参考链接:

https://docs.docker.com/engine/install/centos/

https://docs.docker.com/engine/install/ubuntu/

镜像的基础管理:

增:

docker image pull alpine

从官方的hub仓库拉取镜像,若不指定tag版本,默认使用"latest"。

docker image pull nginx:1.20.1

从官方的hub仓库拉取镜像,指定tag版本为"1.20.1"。

说明:

docker image pull可以简写为"docker pull"

删:

docker image rm jasonyin2020/oldboyedu-games:v0.2

删除镜像。

说明:

docker image rm可以简写为"docker rmi"

改:

docker image tag jasonyin2020/oldboyedu-games:v0.2 oldboyedu-linux82:v0.1

说明:

docker image ls等效于"docker tag"

查:

docker image ls

查看镜像的列表信息。

docker image ls nginx

查看nginx的存储库(REPOSITORY)镜像信息。

docker image ls -q

查看镜像的ID。

docker image ls --no-trunc

不截断输出docker的镜像ID。

说明:

docker image ls等效于"docker images"

彩蛋: 本地镜像迁移.

导出镜像的两种方式:

docker image save -o 1111111 jasonyin2020/oldboyedu-games:v0.2

docker image save jasonyin2020/oldboyedu-games:v0.2 > 22222222

导入镜像的两种方式:

docker image load -i 1111111

docker image load < 22222222

容器的基础管理:

第一梯队的命令:

ls *****

docker container ls|ps|list

查看容器信息。

docker container ls -q

只查看容器的ID。

docker container ls -q --no-trunc

只查看容器的ID并且ID不截断输出。

docker container ps -l

只查看最新创建的容器相关信息。

docker container ls -a

查看所有状态的容器,默认只显示仅在运行的容器。

docker container ls -s

查看容器的总文件大小。

各字段输出说明:

CONTAINER ID :

容器的ID。

IMAGE :

镜像信息,此处既可以是镜像名称,也可以是镜像的ID。

COMMAND:

容器运行的守护进程。

CREATED:

创建容器的时间。

STATUS:

当前容器所处的状态,以及该状态持续的时间。

PORTS:

端口映射相关信息。

NAMES

容器的名称。

run *****

docker container run -d nginx:1.20.1

后台运行一个容器。

docker container run -d --name oldboyedu-linux82 nginx:1.20.1

在后台运行一个容器并指定容器名称。

docker container run -itd alpine

-i:

以交互式的方式运行容器。

-t:

分配一个终端。

docker container run -d -p 88:80 nginx:1.20.1

后台运行nginx容器,并指定端口映射,将宿主机的88端口映射到容器的80端口。

docker container run -itd -w /oldboyedu/linux82/docker -e SCHOOL=oldboyedu -e class=linux82 --rm alpine

-w:

指定容器的工作目录,即连接该容器后的初始目录。

-e:

传递环境变量。

--rm:

当容器退出时,直接删除该容器。一般用于测试使用。

docker container run -d alpine tail -f /etc/hosts

启动容器是修改COMMAND.

rm *****

docker container rm -f 30dca9193ac3 2a83837304d4 elastic_herschel competent_ramanujan

删除容器,可以基于容器的ID或者容器的名称。

prune: (了解即可)

docker container prune -f

移除所有已经停止的容器。

docker container rm -f `docker container ps -aq`

删除所有状态的容器。

cp *****

docker container cp oldboyedu.html hopeful_rubin:/usr/share/nginx/html/

将宿主机的"oldboyedu.html"拷贝到hopeful_rubin容器的"/usr/share/nginx/html/"路径下。

docker container cp hopeful_rubin:/docker-entrypoint.sh ./test.sh

将hopeful_rubin容器的"/docker-entrypoint.sh"文件拷贝到当前目录并重命名为"test.sh"。

exec *****

docker container exec hopeful_rubin ls -l /

在"hopeful_rubin"正在运行的容器中执行"ls -l /"命令。

docker container exec -it hopeful_rubin bash

在容器中执行一个bash程序,并分配一个交互式的终端。

彩蛋: attach和exec有啥区别? (了解即可)

docker container attach hardcore_cannon

将本地的stdin,stdout,stderr连接到"hardcore_cannon"容器。

如果容器的守护进程是bash,sh等工具,且启动容器时有-t参数,我们可以使用"ctrl +p , ctrl +q"退出容器。

区别:

attach:

将宿主机的stdin,stdout,stderr连接到正在运行的容器,并不会产生新的进程。

exec:

在一个正在运行的容器内启动一个新的进程,话句话说,运行一个新的命令。

top *****

docker container top optimistic_wescoff

查看容器中运行的哪些进程信息。

inspect *****

查看容器的详细信息。

docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" condescending_galileo

docker container inspect -f "{{ .NetworkSettings.IPAddress }}" condescending_galileo

docker container inspect -f "{{ range .NetworkSettings.Networks}} {{.IPAddress}} {{end}}" condescending_galileo

获取IP地址。

docker container inspect -f "{{ .NetworkSettings.Networks.bridge.MacAddress }}" condescending_galileo

docker container inspect -f "{{ .NetworkSettings.MacAddress }}" condescending_galileo

docker container inspect -f "{{ range .NetworkSettings.Networks}} {{.MacAddress}} {{end}}" condescending_galileo

获取MAC地址。

docker inspect --format='{{json .NetworkSettings.IPAddress}}' condescending_galileo

可以将输出转换为JSON格式。

logs *****

docker container logs -f -t --since 2022-08-29T09:46:23.639559272Z condescending_galileo

docker container logs -f -t --since 7m condescending_galileo

-f:

实时查看容器日志。

-t:

显示时间戳。

--since:

从某个时间戳(2022-08-29T09:46:23.639559272Z)到现在的所有日志。也支持某个时间范围内的日志。比如7分钟内的日志。

docker container logs -f -t --until 10m condescending_galileo

查看10分钟之前的日志。

docker container logs -f -t --until 2022-08-29T09:46:04.107672065Z --since 2022-08-29T09:23:40.362635984Z condescending_galileo

查看"2022-08-29T09:23:40.362635984Z"-"2022-08-29T09:46:04.107672065Z"时间段的日志。

彩蛋: nginx日志产生了2G的文件大小,如何查看最近10分钟的日志?

今日内容回顾:

  • 什么是容器: 程序+ 依赖的库文件进行打包的一种技术,docker,podman,pouch,lxc,rkt,containerd...

  • docker环境部署,镜像加速,命令行自动补全

  • 镜像管理:(docker image ...)

  • pull:

拉取镜像。

  • ls:

查询镜像。

-a:

-q:

--no-trunc:

  • save:

导出镜像。

-o:

>:

  • load:

导入镜像。

-i:

<:

  • rm:

删除镜像。

-f:

  • tag:

打标签。

  • build

  • history

  • inspect

  • 容器管理: (docker container ...)

  • ls|list|ps:

查看容器的信息。

-q:

-a:

-s:

--no-trunc:

  • run:

创建一个新的容器。

-i:

分配一个标准输入。便于进行交互式操作。

-t:

分配一个tty伪终端。

-d:

后台运行。

-w:

指定工作目录,即连接该容器后的初始目录。

-p:

将宿主机的端口映射到容器端口。

-e:

传递环境变量。

--name:

指定容器的名称。

--rm:

当容器的守护进程退出时,容器也被随之删除,一般用于测试使用。

--network

--privileged

--restart

--volumes-from

--add-host

--link

--ip

--memory-swap

-m

-v:

-P:

-h

  • rm:

删除容器。

-f:

  • prune

删除所有已停止的容器。

  • inspect:

查看详细信息。

  • exec:

在一个正在运行的容器内启动一个新的进程,话句话说,运行一个新的命令。

  • attach

将本地的Stdin,stdout,stderr连接到正在运行的容器,并不会产生新的进程。

  • cp:

用于宿主机和容器之间进行文件拷贝的工具。

  • top:

查了容器的进程。

  • logs:

查看容器的日志。

第二梯队:

restart ***

start ***

stop ***

rename ***

kill ***

stats ***

了解即可:

commit

create

diff

export

pause

unpause

port

update

wait

相关推荐
不像程序员的程序媛3 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Asuicao6 小时前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh
志栋智能6 小时前
超自动化安全中的威胁狩猎
运维·安全·自动化
蜀道山老天师6 小时前
K8s Secret 与 ConfigMap 配置管理及动态更新实战详解
云原生·容器·kubernetes
梦想的颜色7 小时前
【Docker部署插件】:使用 Docker 部署生产级 Kafka 完整版教程
安全·docker·中间件·kafka·消息队列·docker-compose·后端开发
↘"LYong7 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
Elastic 中国社区官方博客7 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
程序员在囧途7 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
想你依然心痛8 小时前
Linux用户空间与内核空间通信:netlink、ioctl、mmap 零拷贝与性能对比
linux·运维·服务器
沉静的小伙8 小时前
在微服务中使用领域事件
java·运维·微服务