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会从本地镜像找,没有就从官网下载、再运行
(1.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博客
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,配置账户密码
登录后如下图
四、镜像概念与原理
(4.1)镜像基础原理
Docker镜像
镜像是什么?
镜像是一种轻量级,可执行化的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件锁需要的所有内容,包括代码,运行时(库,环境变量和配置文件)。
所有的应用 直接打包docker 镜像 就可以直接跑起来!
镜像加速原理
(1)UnionFS(联合文件系统)
我们下载的时候看到的一层层就是这个!
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等等。
平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。
由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
(虚拟机是分钟级,容器是秒级!)
(4.3) 分层理解
分层镜像
我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!
Docker镜像要采用这种分层的好处?
**资源共享** 有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像。
同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
- 所有的Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。
- 举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;
- 如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
简单来说 就是 原本有的 就共享 没有的咱就下载 更新了 就替换新的
特点:
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
(4.4)commit镜像
# 提交容器成为一个新的副本
docker commit
# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
- # 1.启动一个默认的tomcat。
- # 2.发现这个默认的tomcat是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的。
- # 3.我自己拷贝进去了基本的文件。
- # 4.将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。
小结: 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