deepin 20.8安装docker(docker使用知识)
阅读数:536 评论数:0
跳转到新版页面分类
应用软件
正文
一、概述
Docker使用Go语言开发,基于Linux内核的cgroup、namespace以及OverlayFS类的Union FS等技术,对进程进行封装隔离。
docker-ce是社区版,docker-ee是企业版。
1、基本架构
(1)cgroup
control group的缩写,它可以实现将一组进程放进一个控制组,通过给这个控制组分配对应的资源 ,从而实现这个组下的资源控制。
(2)namespace
主要实现访问隔离。
(3)runc
它是根据OCI(Open Container Initiative ,容器的工业级标准化组织)标准创建并运行的CLI tool(命令行工具)。
(4)containerd
守护进程,它管理容器生命周期。
2、镜像(Image)
docker镜像是一个虚拟的概念,是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含一些为运行时准备的一些配置参数(如环境变量)。
3、容器(Container)
容器的实质是进程,它与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。有独立的文件系统、网络、进程空间等。
4、仓库(Docker Registry)
主要用于集中的存储和分发镜像。
二、安装
官方仓库里有docker-ce软件包,我是使用下面的方式安装的。
前面的命令由curl下载install.sh脚本,bash -s使bash从stdin读取数据。
所以上面的命令就是下载安装脚本install.sh,并传入配置参数执行。
三、常用命令
1、常用命令
2、docker run / docker create
create是生成一个容器,但是不运行,run是生成之后同时运行它。
--add-host list |
添加hosts的记录到/etc/hosts中 例如: docker run -it -net=br10 -ip=192.168.10.01 --add-host=host10:192.168.10.01 -name=ins01 stress bash 这样在容器里的/etc/hosts中就会多一条记录: 192.168.10.10 host10 |
-a,--attach list | 如果在执行run命令时没有指定-a,那么docker默认会挂载所有标准数据流,包括输入输出和错误 |
--blkio-weight uint16 | 设置容器块设备IO的权重,有效值范围为10~1000,默认情况下是500 |
--blkio-weight-device list |
指定的块设备的IO相对权重。 使用方式:--blkio-weight-device="设备名称:权重值" |
--cap-add list | 控制docker的内核权限 |
--cap-drop list | 控制docker的内核权限 |
--cgroup-parent string | 指定容器的父cgroup |
--cidfile string |
将容器的id写入主机中的文件 例如:docker run -it cidfile=/root/cid.file -name=ins01 centos bash |
--cpu-period int | linux使用的CFS(完全公平调度器)的周期为100ms,通过此参数可以设置窗口对CPU的使用周期。 |
--cpu-quota int | 用来指定在cpu-period周期内,最多可以有多少进间来跑这个容器 |
--cpu-rt-period int | 实时调高度策略的时间周期 |
--cpu-rt-runtime int | 实时高度策略的周期中的运行时间 |
-c,--cpu-shares int | 设置容器使用cpu的权重 |
--cpu decimal | 容器占用主机的CPU的比例 |
--cpuset-cups string |
指定允许容器使用的CPU序号,从0开始 例如: --cpuset-cpus=0-2 //可以使用0,1,2号cpu --cpuset-cpus=0-1,3 // 可以使用0,1,3号cpu |
--cpuset-mems string |
限制容器进程使用的哪些内存节点 |
--device list |
映射设备到容器 |
--device-cgroup-rule list |
向指定的设备添加cgroup 规则 |
--device-read-bps list |
用来限制指定设备的读取速率,例如: --device-read-bps /dev/sda:1mb |
--device-read-iops list |
设置设备的IO读取速率 例如: --device-read-iops /dev/sda:400 (400次/秒) |
--device-write-bps list |
限制设备的IO写速率 |
--device-write-iops list |
设置设备IO读速率 |
--disable-content-trust |
跳过镜像验证 |
--dns list |
设置容器的dns地址,在容器的/etc/resolve.conf文件中可查看 |
--dns-option list |
容器/etc/resolv.conf文件中其它设置 |
--dns-search list |
设置容器的搜索域,当设定搜索域为.examle.com时,在搜索一个名为host的主机时,dns不仅搜索host,还会搜索host.example.com。 |
--entrypoint string |
覆盖镜像默认的ENTRYPOINT |
-e,--env list |
设定容器实例的环境变量, 例如:docker run -it --env=GOROOT=/usr/loca/go centos bash |
--expose list |
开放一个端口或一组端口 例如: docker create -it --expose="80" --expose="8080" --expose="9001" -name=ins01 centos |
--group-add list |
额外要加入的的组 |
--health-cmd string |
健康检查运行的命令 |
--health-interval duration |
健康检查的间隔 |
--health-retries int |
健康检查的尝试次数 |
--health-start-period duration |
第一次执行健康检查的延时 |
--health-timeout duration |
健康检查的超时时间 |
-h,--hostname string |
容器的hostName,对应/etc/hostname |
--init |
Run an init inside the container that forwards signals and reaps processes |
-i,--interactive |
交互式运行 |
--ip string | 设置ipv4地址,例如-ip=192.168.1.23 |
--ip6 string | 设置ipv6地址 |
--ipc string | 使用的Ipc namespace |
--isolation string | 容器的隔离技术 |
--kernel-memory byte | 内核内存限制,即容器的系统内核可以使用多少内存 |
-l,--label list | 设置窗口标签 |
--label-file=file | 通过文件设置容器标签 |
--link list | 链接其它容器 |
--link-local-ip list | Container IPv4/IPv6 link-local addresses |
--log-driver string | 容器的日志驱动 |
--log-opt list | 日志驱动参数 |
--mac-address tring | 容器的mac地址 |
-m,--memory bytes | 内存限制,默认情况下,容器可以占用无限量的内存,直至主机内存资源耗尽 |
--memory-reservation bytes | 内存软限制 |
--memory-swap bytes | 内存交换区设定 |
--memory-swappiness int | 0表示容器不使用交换区,100表示容器尽可能多的使用交换区 |
--mount mount | 向容器挂载一个文件系统 |
--name string | 容器的名字 |
--network string | 设置容器使用的网络名称 |
--network-alias list | Add network-scoped alias for the container |
--no-healthcheck | 禁用任何容器的健康检查 |
--oom-kill-disable | 内存耗尽时是否杀掉容器 |
--oom-score-adj int | Tune host’s OOM preferences (-1000 to 1000) |
--pid string | 使用的pid 命名空间 |
--pid-limit int | Tune container pids limit (set -1 for unlimited) |
--privileged | 默认情况下,container是不能访问任何其他设备的,但是通过privileged,容器就可以访问任何其他设备 |
-p,--publish list | 指定端口映射 |
-P,--publish-all |
映射所有开放的端口, 例如:docker create -it -P –expose={“80″,”8080″,”3306″} –name=ins01 centos |
--read-only |
以只读方式挂载容器的根文件系统 |
--restart string |
当容器退出时的重启策略 |
--rm |
--rm和-d不能共用 当容器退出地自动移除 |
--runtime string |
Runtime to use for this container |
--security-opt list |
安全设置 |
--shm-size byte |
/dev/shm大小 |
--stop-signal string | Signal to stop a container (default “SIGTERM”) |
--stop-timeout int | Timeout (in seconds) to stop a container |
--storage-opt list | Storage driver options for the container |
--sysctl map | Sysctl options (default map[]) |
--tmpfs list | Mount a tmpfs directory |
-t,--tty | 分配一个伪交互终端,通常和-i联合使用-it |
--ulimit ulimit | Ulimit options (default []) |
-u,--user string | Username or UID (format: <name|uid>[:<group|gid>]) |
--userns string | User namespace to use |
--uts string | UTS namespace to use |
-v,--volumne list | 挂载数据卷 |
--volume-driver string | Optional volume driver for the container |
--volumnes-from list | Mount volumes from the specified container(s) |
-w,--workdir string | 进入容器后的默认目录 |
(1)docker run自动拉取镜像
使用 docker run
启动一个 Docker 容器时,并不需要先手动拉取镜像。如果本地没有该镜像,Docker 会自动从默认的 Docker Hub 仓库或指定的镜像仓库拉取镜像。
如果你希望直接从自建的 Registry 中拉取镜像(比如你自己的私有 Registry,而不是 Docker Hub),在 docker run
或 docker pull
命令中使用你的 Registry 地址即可。例如:
3、docker update
用于更新一个或多个容器的配置,可以是容器id,也可以是容器名,参数应该和run/create一样。这个命令不需要停止容器,可以在容器运行时动态调整容器的资源限制。
(1)常见选项
docker update
允许你更新容器的多个资源限制,包括内存、CPU、网络等。常见的选项如下:
--memory
或-m
:设置容器的最大内存限制。--memory-swap
:设置容器使用的内存与交换空间的总限制。--cpu-shares
:设置容器的 CPU 配额(相对权重)。--cpu-period
:设置容器的 CPU 配额周期。--cpu-quota
:设置容器的 CPU 配额。--cpuset-cpus
:指定容器可以运行的 CPU 核心。--blkio-weight
:设置容器的磁盘 I/O 权重。
(2)常用示例
这将把容器的最大内存限制设置为 2GB。
该值是一个相对权重,默认是 1024。这将容器的 CPU 权重设置为 512,相对于其他容器的 CPU 权重。
可以使用 --cpuset-cpus
来限制容器使用的 CPU 核心
这将限制容器使用 1GB 内存和 2GB 的交换空间。
默认情况下,容器的 I/O 权重是 500,范围是 10 到 1000。
4、docker exec
通过它可以进入容器内部。
--detach,-d | 以后台方式运行命令 |
--detach-keys | Override the key sequence for detaching a container |
--env,-e | 设置环境变量 |
--env-file | 通过文件的方式设置环境变量 |
--interactive,-i | 交互式操作 |
--tty,-t | 分配一个伪终端 |
--privileged | 使用命令获取所有权限 |
--user,u | username or uid |
--workdir,-w | 进入的工作目录 |
5、docker commit和docker tag的区别
(1)docker commit
docker commit
用于将正在运行的容器的当前状态保存为一个新的镜像。你可以修改容器内部的文件系统、安装软件、配置环境等,然后使用 docker commit
命令将容器的当前状态(包括文件系统的更改)保存为一个新的镜像。
- 创建镜像:将容器的当前状态(包括文件、配置和安装的软件等)保存为一个新的镜像。
- 不修改标签:
docker commit
创建的新镜像没有标签时默认会使用latest
标签,除非你明确指定标签。 - 适用于临时修改:适用于那些需要临时保存容器状态为镜像的场景,但不推荐过度使用
docker commit
,因为它会使得镜像的管理变得不清晰。
注意:
docker commit
不会保存容器中的环境变量、卷挂载、网络配置等。- 通常用于开发和调试阶段,或者当你需要从容器中导出当前的状态为新的镜像时。
(2)docker tag
docker tag
用于给现有的镜像打标签。标签是镜像的一个附加标识,允许你对镜像进行版本控制,或者创建不同的名称来引用同一个镜像。
这实际上并不会创建新的镜像,只是创建了一个新的标签,使得你可以通过不同的标签来引用同一个镜像。
注意:
docker tag
不会创建新的镜像,它只是为已有的镜像添加标签。- 标签是管理镜像的有效方式,尤其是当你需要将镜像推送到 Docker Hub 或其他仓库时,标签可以帮助区分不同版本的镜像。
四、常用方式
1、docker容器内apt-get换源
2、安装mysql5.5
3、向容器中传文件
4、查看本地镜像有哪些
要查看本地的 Docker 镜像,可以使用 docker images
命令(或者 docker image ls
,这是等价的)。
或者
(1)查看特定镜像
如果你只想查看某个特定镜像的信息,可以通过 docker images <镜像名称>
来实现。例如
(2)查看详细信息
如果你需要更多的镜像详细信息(如每一层的具体信息),可以使用 docker inspect
命令:
(3)清理本地镜像
如果你想清理不再使用的镜像,可以使用以下命令删除它们:
如果你想清理所有未被容器使用的镜像,可以使用:
这将删除所有悬空(dangling)镜像,即没有标签或被任何容器引用的镜像。
4、查看容器
要查看 Docker 中正在运行的容器,可以使用 docker ps
命令。
(1)查看所有容器(包括停止的容器)
默认情况下,docker ps
只显示正在运行的容器。如果你想查看包括停止的容器在内的所有容器,可以使用 -a
(或 --all
)选项:
(2)查看容器的详细信息
如果你需要查看某个特定容器的详细信息,可以使用 docker inspect
命令:
- 查看容器的环境变量
- 查看容器的命令行启动参数
- 查看容器的资源限制
(3)查看容器日志
如果你想查看容器的输出日志,可以使用 docker logs
命令:
(4)查看容器的资源使用情况
5、容器的生命周期管理
(1)启动容器
如果容器已经被创建并停止,你可以使用 docker start
命令启动该容器:
你也可以一次性启动多个容器:
(2)停止容器
使用 docker stop
命令来停止一个正在运行的容器。此命令会发送一个 SIGTERM 信号给容器,容器会优雅地停止,通常容器会在10秒内正常停止(如果容器没有在这个时间内停止,Docker 会发送 SIGKILL 信号强制终止容器)。
你也可以停止多个容器,方法如下
(3)暂停容器
使用 docker pause
命令可以暂停一个正在运行的容器。暂停会暂停容器中的所有进程。
(4)恢复暂停的容器
使用 docker unpause
命令恢复暂停的容器
(5)重启容器
使用 docker restart
命令可以重启一个容器,容器会先停止再重新启动。
你也可以同时重启多个容器:
(6)强制停止容器
如果容器因为某些原因没有响应停止命令,可以使用 docker kill
强制停止容器,docker kill
会发送 SIGKILL 信号给容器。
6、更改容器的环境变量参数
(1)删除重建
在 Docker 中,容器的环境变量通常是在容器启动时通过 -e
或 --env
参数设置的。一旦容器创建并启动后,环境变量不能直接修改。要更改容器的环境变量,你通常需要停止并删除当前容器,然后使用新的环境变量重新创建容器。
(2)临时性修改
虽然你不能直接更改容器的环境变量,但你可以通过 docker exec
在容器内部修改环境变量,临时改变当前会话的环境变量(仅对当前会话有效,容器重启后无效)。
进入容器后,使用 export
命令来设置新的环境变量:
(3)使用docker compose修改
如果你是通过 Docker Compose 启动的容器,可以修改 docker-compose.yml
文件中的 environment
字段,来改变环境变量。
修改完 docker-compose.yml
文件后,重新启动服务: