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

相关推荐
m0_6090004238 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记2 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
m0_741768855 小时前
使用docker的小例子
运维·docker·容器
学习3人组6 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神6 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0666 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen016 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦7 小时前
linux 解压缩
linux·运维·服务器
最新小梦8 小时前
Docker日志管理
运维·docker·容器
鸡鸭扣9 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu