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)内网下载软件包
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