docker从入门到精通

 【1】初始化操作

参考转自:https://blog.csdn.net/2401_84578953/article/details/145607494

(1.1)docker卸载与安装

# 1.卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2.需要的安装包
yum install -y yum-utils
# 3.设置镜像的仓库
yum-config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认是从国外的。
yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的。
# 安装容器之前,更新yum软件包索引。
yum makecache fast
# 4.安装容器相关的。docker-ce(社区版)docker-ee(企业版)
yum install docker-ce docker-ce-cli containerd.io
# 5.启动docker
systemctl start docker
# 6.使用docker version查看是否安装成功

(1.2)拉取、执行第一个镜像

docker run hello-world
# 如果不行则 docker search docker.1ms.run/hello-world
# 过程:run会从本地镜像找,没有就从官网下载、再运行

  image

 

(1.3)阿里云加速

  1. 登录阿里云,找到容器服务。
  2. 找到镜像加速地址。
  3. 配置使用。
    四个命令,依次执行即可:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.xxx.xxx.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

 二、docker常用操作

(2.1)docker基本命令参考

 

Docker常用命令原理图_胡伟煌的博客-CSDN博客 这个是一个大佬写的原理图!!! yyds

(2.1)帮助命令
docker version # 显示docker的版本信息 docker
info # 显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help # 帮助命令 如 docker run --help (2.2)镜像 docker images # 查看所有镜像 docker search image # 查找镜像 docker pull image # 从仓库下载镜像
docker push image # 上传本地镜像到仓库 docker rmi image
/id # 根据镜像名/镜像ip删除镜像 (2.3)容器命令基础 docker run <参数> image # 根据镜像新建容器并启动。 --name 给容器起一个自定义名字 -d 为后台守护进程启动 -it 为交互式启动一个新终端(通常用于通过bash进入容器OS) -p 指定容器的端口,也可以指定容器与宿主机的端口映射关系 docker run -d -p 宿主机端口:容器端口 镜像id
案例:docker run -d --name nginx01 -p 3344:80 nginx docker
ps -a   # 列出所有容器运行信息 -q 为仅列出id docker rm container/id  # 删除容器,若容器正在执行则无法删除,除非使用 rm -f 参数强制执行
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器

(2.4)docker 导入导出镜像
docker save 保存的是镜像,docker export 保存的是容器
docker load 是用来加载镜像包,docker import 是用来加载容器包,但两者都会恢复为镜像
docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称

使用场景:save/load 适合原生包迁移,export/import 适合在容器中配置了基础环境后的自定义镜像导入导出
docker save -o myimage.tar myimage:tag   # 把 myimage:tag 镜像打包成 myimage.tar,多个镜像到一个镜像包的话,以空格分割即可
# save 如果指定的是 containerid,那么打包的是生成该容器的镜像文件  
docker save i # 查看打包进度
docker load -i myimage.tar # 把 myimage.tar 中的镜像导入到本地 docker,如果本地有同名的,将会被覆盖
docker export -o file.tar containerid # 把容器的文件系统打包生成 file.tar 容器包文件
docker import postgres-export.tar postgres:latest # 把容器导出的文件恢复成一个镜像 postgres:lasest

(2.5)容器运维实用命令
docker run -d image # 后台进程运行镜像
docker logs -f 容器id/名字 # 查看容器日志 默认在/var/lib/docker/comtainers/容器id/容器id-json.log
          --details 显示更多的信息
          -f, --follow # 动态更新日志
          --since string   # 显示自某时间之后的日志或相对时间 docker logs -f -t --since="2020-02-02" --tail=10 容器ID/名称
          --tail string   # 显示末尾开始指定行,默认是全部 docker logs -f -t --tail=25 容器ID/名称
          -t, --timestamps # 日志显示时间戳
          --until string # 显示自某时间之后的日志或相对时间 docker logs -t --since="2020-05-06T12:00:00" --until "2020-05-07T12:00:00" 容器ID/名称
docker inspect 容器id # 获取容器元数据
docker exec -it 容器id /bin/bash # (常用)以一个新终端进入容器OS
docker attach 容器id # (不建议)进入容器正在执行的终端,不会启动新进程
docker copy 容器id:容器内路径 目的主机路径 # 复制文件案例:docker cp 容器id:容器内路径 目的主机的路径
docker run -d --name nginx01 -p 3344:80 nginx

(2.2)docker 所有命令参数

转自:docker常用命令_JWei_7的博客-CSDN博客

image

 

attach    Attach to a running container  #当前shell下attach连接指定运行镜像

build     Build an image from a Dockerfile  #通过Dockerfile定制镜像

commit    Create a new image from a container's changes  #提交当前容器为新的镜像

cp          Copy files/folders from a container to a HOSTDIR or to STDOUT  #从容器中拷贝指定文件或者目录到宿主机中

create    Create a new container  #创建一个新的容器,同run 但不启动容器

diff      Inspect changes on a container's filesystem  #查看docker容器变化

events    Get real time events from the server#从docker服务获取容器实时事件

exec      Run a command in a running container#在已存在的容器上运行命令

export    Export a container's filesystem as a tar archive  #导出容器的内容流作为一个tar归档文件(对应import)

history   Show the history of an image  #展示一个镜像形成历史

images    List images  #列出系统当前镜像

import    Import the contents from a tarball to create a filesystem image  #从tar包中的内容创建一个新的文件系统映像(对应export)

info      Display system-wide information  #显示系统相关信息

inspect   Return low-level information on a container or image  #查看容器详细信息

kill      Kill a running container  #kill指定docker容器

load      Load an image from a tar archive or STDIN  #从一个tar包中加载一个镜像(对应save)

login     Register or log in to a Docker registry#注册或者登陆一个docker源服务器

logout    Log out from a Docker registry  #从当前Docker registry退出

logs      Fetch the logs of a container  #输出当前容器日志信息

pause     Pause all processes within a container#暂停容器

port      List port mappings or a specific mapping for the CONTAINER  #查看映射端口对应的容器内部源端口

ps        List containers  #列出容器列表

pull      Pull an image or a repository from a registry  #从docker镜像源服务器拉取指定镜像或者库镜像

push      Push an image or a repository to a registry  #推送指定镜像或者库镜像至docker源服务器

rename    Rename a container  #重命名容器

restart   Restart a running container  #重启运行的容器

rm        Remove one or more containers  #移除一个或者多个容器

rmi       Remove one or more images  #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)

run       Run a command in a new container  #创建一个新的容器并运行一个命令

save      Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)

search    Search the Docker Hub for images  #在docker hub中搜索镜像

start    Start one or more stopped containers#启动容器

stats    Display a live stream of container(s) resource usage statistics  #统计容器使用资源

stop     Stop a running container  #停止容器

tag      Tag an image into a repository  #给源中镜像打标签

top      Display the running processes of a container #查看容器中运行的进程信息

unpause  Unpause all processes within a container  #取消暂停容器

version  Show the Docker version information#查看容器版本号

wait     Block until a container stops, then print its exit code  #截取容器停止时的退出状态值
————————————————

原文链接:https://blog.csdn.net/qq_54729417/article/details/127945665

 

三、Docker可视化界面工具 portainer

什么是portainer ?

  Docker图形化界面管理工具!提供一个后台面板供我们操作!类似于 宝塔面板

8088 外网访问端口 9000 是内部映射端口

docker.1ms.run/
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 如果不行则最末尾改成 docker.1ms.run/portainer/portainer

然后URL访问即可  ip:8088,配置账户密码

   img_v3_02r5_7708787c-b2e8-45d5-b85b-8b93f45cfa2m

 登录后如下图

   img_v3_02r5_d092418c-33d9-4c94-aac5-1b9ad664995m

 四、镜像概念与原理

(4.1)镜像基础原理

Docker镜像
镜像是什么?
  镜像是一种轻量级,可执行化的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件锁需要的所有内容,包括代码,运行时(库,环境变量和配置文件)。

  所有的应用 直接打包docker 镜像 就可以直接跑起来!


镜像加速原理
(1)UnionFS(联合文件系统)
我们下载的时候看到的一层层就是这个!

image

 

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。


**特性:**一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

(4.2)Docker 镜像加载原型

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

  **bootfs(boot file system)**主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

  rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
  rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

 image

 

image

 

平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?

  对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。
  由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

(虚拟机是分钟级,容器是秒级!)

(4.3) 分层理解

分层镜像

   image

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!

Docker镜像要采用这种分层的好处?

  **资源共享** 有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像。

  同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

  • 所有的Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。
  • 举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;
  • 如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。

image

 简单来说 就是 原本有的 就共享 没有的咱就下载 更新了 就替换新的

特点:

  Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
  这一层就是我们通常说的容器层,容器之下的都叫镜像层!

image

 

 

(4.4)commit镜像

# 提交容器成为一个新的副本
  docker commit
# 命令和git原理类似
  docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

  • # 1.启动一个默认的tomcat。
  • # 2.发现这个默认的tomcat是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的。
  • # 3.我自己拷贝进去了基本的文件。
  • # 4.将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。

image

 

小结: commit镜像就是游戏存档 tag是版本版本信息

 【最佳实践】

(1)docker日志很多应该怎么办?

find /data/docker  -type f -name "*.log" -exec sh -c "echo ''>{}" \;
find /data/docker  -type f -name "*.log"|xargs -I {} sh -c "echo ''>{}"

 

 

 

 

【参考文档】

转自:https://blog.csdn.net/weixin_64015933/article/details/125743089

一、docker基本命令

1、查看镜像——docker images

​2、查看所有状态容器——docker ps -a

3、docker —— run 指令

4、查看docker版本命令——docker -v

5、查看docker信息——docker info

6、docker帮助命令文档——docker --help

二、docker 镜像操作

1、搜索镜像(公共仓库)——docker search

2、下载镜像——docker pull

3、查看镜像列表——docker images

4、获取镜像信息——docker inspect

5、添加镜像标签——docker tag

6、删除镜像——docker rmi

7、批量删除镜像

8、导出/导入镜像——docker save/load

三、容器操作

1、查询所有容器运行状态——docker ps -a

2、创建容器——docker create

3、 启动容器——docker start

4、启动容器(一次性执行)—— docker run

5、查看容器ip地址——docker inspect

6、进入容器——docker exec

7、容器导出/导入——docker export

8、删除容器——docker rm -f

9、查看docker消耗的资源状态

10、停止容器 ------ docker stop

四、 总结

1、如果镜像优化?

2、怎么看当下有多大号容器,怎么看当下所有容器占用的I/O有多少,占用内存多少?

 

 

 

3、容器有哪些状态?

4、overlay2由哪几部分组成 ?
————————————————
版权声明:本文为CSDN博主「小小皮卡丘、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_64015933/article/details/125743089

 

posted @ 2023-02-23 15:03  郭大侠1  阅读(116)  评论(0)    收藏  举报