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 -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

前面的命令由curl下载install.sh脚本,bash -s使bash从stdin读取数据。

所以上面的命令就是下载安装脚本install.sh,并传入配置参数执行。

三、常用命令

1、常用命令

#########docker服务管理##########
#启动
systemctl start docker
#查看状态
systemctl status docker
#关闭
systemctl stop docker
#重启
systemctl restart docker

#查看窗口日志
docker logs -f <容器名or ID>

##########容器管理###############
#查看正在运行的容器
docker ps
# 包括已经停止的
docker ps -a
#删除所有容器
docker rm $(docker ps -a -q)
#删除单个容器
docker rm <容器名 or ID>
#容器生命周期管理
docker stop <容器名 or ID>
docker start <容器名 or ID>
docker kill <容器名 or ID>
#运行一个新容器,以redminie镜像为例
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
#查看当前容器的所有信息
docker info
################镜像管理###########
#查看所有镜像
docker images
#删除所有镜像
docker rmi $(docker images|grep none|awk '{print $3}'|sort -r)
docker rmi repository:tag
#查看本地的镜像
docker image ls
#创建镜像
docker commit
#导入镜像
docker load
#拉取镜像
docker pull
#上传镜像
docker push
#删除镜像
docker rmi
#导出镜像
docker save
#为镜像标签
docker tag

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
// 将映射主机的随机端口到容器的80,8080,3306端口

--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 rundocker pull 命令中使用你的 Registry 地址即可。例如:

docker run -d -p 5000:5000 --name registry localhost:5000/my-image:latest

3、docker update

用于更新一个或多个容器的配置,可以是容器id,也可以是容器名,参数应该和run/create一样。这个命令不需要停止容器,可以在容器运行时动态调整容器的资源限制。

docker update [OPTIONS] CONTAINER [CONTAINER...]
(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)常用示例
docker update --memory 2g <容器ID或容器名称>

这将把容器的最大内存限制设置为 2GB。

docker update --cpu-shares 512 <容器ID或容器名称>

该值是一个相对权重,默认是 1024。这将容器的 CPU 权重设置为 512,相对于其他容器的 CPU 权重。

docker update --cpuset-cpus 0,1 <容器ID或容器名称>

可以使用 --cpuset-cpus 来限制容器使用的 CPU 核心

docker update --memory 1g --memory-swap 2g <容器ID或容器名称>

这将限制容器使用 1GB 内存和 2GB 的交换空间。

docker update --blkio-weight 500 <容器ID或容器名称>

默认情况下,容器的 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 <容器ID或容器名称> <镜像名称>:<标签>

 

  • 创建镜像:将容器的当前状态(包括文件、配置和安装的软件等)保存为一个新的镜像。
  • 不修改标签docker commit 创建的新镜像没有标签时默认会使用 latest 标签,除非你明确指定标签。
  • 适用于临时修改:适用于那些需要临时保存容器状态为镜像的场景,但不推荐过度使用 docker commit,因为它会使得镜像的管理变得不清晰。

注意:

  • docker commit 不会保存容器中的环境变量、卷挂载、网络配置等
  • 通常用于开发和调试阶段,或者当你需要从容器中导出当前的状态为新的镜像时。

(2)docker tag

docker tag 用于给现有的镜像打标签。标签是镜像的一个附加标识,允许你对镜像进行版本控制,或者创建不同的名称来引用同一个镜像。

docker tag <源镜像>:<源标签> <目标镜像>:<目标标签>

这实际上并不会创建新的镜像,只是创建了一个新的标签,使得你可以通过不同的标签来引用同一个镜像。

注意:

 

  • docker tag 不会创建新的镜像,它只是为已有的镜像添加标签。
  • 标签是管理镜像的有效方式,尤其是当你需要将镜像推送到 Docker Hub 或其他仓库时,标签可以帮助区分不同版本的镜像。

 

 

 

四、常用方式

1、docker容器内apt-get换源

#复制原文件备份
mv /etc/apt/sources.list /etc/apt/sources.list.bak

#修改sources.list
cat <<EOF >/etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
EOF

#更新apt
apt-get update

#安装vim命令
apt-get install vim

#还原sources.list文件
mv /etc/apt/sources.list.bak /etc/apt/sources.list

#安装vim
apt-get install vim

#安装ssh
apt-get isntall openssh-client

2、安装mysql5.5

# 获取mysql镜像
docker pull mysql:5.5

#创建mysql容器
docker create --name mysql -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.5
# -name mysql指定容器的名称
# -v /data/mysql-data:/var/lib/mysql 将主机目录/data/mysql-data挂载到容器的/var/lib/mysql上
#-p 3306:3306  设置端口映射,主机端口3306,容器内部端口3306
# -e MYSQL_ROOT_PASSWORD=123456 设置容器参数,mysql的root密码为123456
# mysql:5.5 镜像名:版本

# 运行mysql容器
docker start mysql

#进入mysql容器
docker exec -it mysql /bin/bash

3、向容器中传文件

// 上传
docker cp /路径/文件名 容器:/上传路径
// 下载
docker cp 容器:/上传路径 /路径/文件名

4、查看本地镜像有哪些

要查看本地的 Docker 镜像,可以使用 docker images 命令(或者 docker image ls,这是等价的)。

docker images

或者

docker image ls
(1)查看特定镜像

如果你只想查看某个特定镜像的信息,可以通过 docker images <镜像名称> 来实现。例如

docker images ubuntu
(2)查看详细信息

如果你需要更多的镜像详细信息(如每一层的具体信息),可以使用 docker inspect 命令:

docker inspect <镜像ID或镜像名称>
(3)清理本地镜像

如果你想清理不再使用的镜像,可以使用以下命令删除它们:

docker rmi <镜像ID或镜像名称>

如果你想清理所有未被容器使用的镜像,可以使用:

docker image prune

这将删除所有悬空(dangling)镜像,即没有标签或被任何容器引用的镜像。

4、查看容器

要查看 Docker 中正在运行的容器,可以使用 docker ps 命令。

docker ps
(1)查看所有容器(包括停止的容器)

默认情况下,docker ps 只显示正在运行的容器。如果你想查看包括停止的容器在内的所有容器,可以使用 -a(或 --all)选项:

docker ps -a
(2)查看容器的详细信息

如果你需要查看某个特定容器的详细信息,可以使用 docker inspect 命令:

docker inspect <容器ID或容器名称>
  • 查看容器的环境变量
docker inspect --format '{{json .Config.Env}}' <容器ID或容器名称>
  • 查看容器的命令行启动参数
docker inspect --format '{{.Path}} {{.Args}}' <容器ID或容器名称>
  • 查看容器的资源限制
docker inspect --format '{{.HostConfig.Memory}} {{.HostConfig.CpuShares}}' <容器ID或容器名称>
(3)查看容器日志

如果你想查看容器的输出日志,可以使用 docker logs 命令:

docker logs <容器ID或容器名称>
(4)查看容器的资源使用情况
docker stats

5、容器的生命周期管理

(1)启动容器

如果容器已经被创建并停止,你可以使用 docker start 命令启动该容器:

docker start <容器ID或容器名称>

你也可以一次性启动多个容器:

docker start <容器ID或容器名称> <容器ID或容器名称> ...
(2)停止容器

使用 docker stop 命令来停止一个正在运行的容器。此命令会发送一个 SIGTERM 信号给容器,容器会优雅地停止,通常容器会在10秒内正常停止(如果容器没有在这个时间内停止,Docker 会发送 SIGKILL 信号强制终止容器)。

docker stop <容器ID或容器名称>

你也可以停止多个容器,方法如下

docker stop <容器ID或容器名称> <容器ID或容器名称> ...
(3)暂停容器

使用 docker pause 命令可以暂停一个正在运行的容器。暂停会暂停容器中的所有进程。

docker pause <容器ID或容器名称>
(4)恢复暂停的容器

使用 docker unpause 命令恢复暂停的容器

docker unpause <容器ID或容器名称>
(5)重启容器

使用 docker restart 命令可以重启一个容器,容器会先停止再重新启动。

docker restart <容器ID或容器名称>

你也可以同时重启多个容器:

docker restart <容器ID或容器名称> <容器ID或容器名称> ...
(6)强制停止容器

如果容器因为某些原因没有响应停止命令,可以使用 docker kill 强制停止容器,docker kill 会发送 SIGKILL 信号给容器。

docker kill <容器ID或容器名称>

6、更改容器的环境变量参数

(1)删除重建

在 Docker 中,容器的环境变量通常是在容器启动时通过 -e--env 参数设置的。一旦容器创建并启动后,环境变量不能直接修改。要更改容器的环境变量,你通常需要停止并删除当前容器,然后使用新的环境变量重新创建容器。

(2)临时性修改

虽然你不能直接更改容器的环境变量,但你可以通过 docker exec 在容器内部修改环境变量,临时改变当前会话的环境变量(仅对当前会话有效,容器重启后无效)。

docker exec -it <容器ID或容器名称> /bin/bash

进入容器后,使用 export 命令来设置新的环境变量:

export NEW_VAR=value
(3)使用docker compose修改

如果你是通过 Docker Compose 启动的容器,可以修改 docker-compose.yml 文件中的 environment 字段,来改变环境变量。

version: '3'
services:
  web:
    image: nginx
    environment:
      - MY_VAR=HelloWorld
      - MY_NUMBER=42

修改完 docker-compose.yml 文件后,重新启动服务:

docker-compose down
docker-compose up -d



相关推荐

目的 在你的maven项目中创建一个Docker镜像。比方说,build过程可以为java服务输出一个可以运行该服务的Docker镜像。 步骤 有两种配置方式,一种是通过Dockerfile文件,一种

dockerfile-maven-plugin主要作用是在项目构建的时候生成项目的docker镜像文件。 正常情况下,我们开发一个应用程序后,会使用maven进行打包,生成对应的j

一、简介 docker支持多种graphDriver,包括vfs、devicemapper、overlay、overlay2、aufs等。 docker默认的存储目录是/var/lib/docker

一、/var/lib/docker/containers 目录存放的是创建好的容器和主机有关的配置,因为这类配置和本地环境有关,所以不方便放入镜像之中,所以就放在这里。 二、/var/lib/dock

一、概述 overlay2和早期的aufs类似,但它性能更好。因为overlay2只有两层,不是多层,所以操作快于aufs。 overlayFS在Linux 3.18开始正式支持,它能将上层目录(up

一、概述     Docker Compose 是 Docker 提供的一个工具,在大多数系统中,Docker Compose 通常会随着 Docker 的安装一同安装。用于定义和运行多容器的 Doc

一、概述 Portainer 是一个开源的容器管理平台,旨在简化 Docker 和 Kubernetes 环境的管理。它提供了一个直观的 Web 界面,使用户可以轻松地管理容器、镜像、网络、卷、堆栈以

一、准备vue项目 1、确保项目可以正常运行。 project-root/ ├── dist/ # Vue 构建后的静态文件 ├── nginx.conf

一、准备Java项目 1、使用构建工具将项目打包成一个可运行jar文件 mvn clean package 2、jar文件     打包完成后,生成的 .jar 文件通常位于target/目录 pr

一、安装redis 1、运行命令 docker run -d \ --name redis \ -p 6379:6379 \ redis:latest 2、持久化配置 如果需要持久化 R