deepin 20.8安装docker(docker使用知识)
阅读数:167 评论数:0
跳转到新版页面分类
应用软件
正文
一、概述
Docker使用Go语言开发,基于Linux内核的cgroup、namespace以及OverlayFS类的Union FS等技术,对进程进行封装隔离。
docker-ce是社区版,docker-ee是企业版。
(1)cgroup
control group的缩写,它可以实现将一组进程放进一个控制组,通过给这个控制组分配对应的资源 ,从而实现这个组下的资源控制。
(2)namespace
主要实现访问隔离。
(3)runc
它是根据OCI(Open Container Initiative ,容器的工业级标准化组织)标准创建并运行的CLI tool(命令行工具)。
(4)containerd
守护进程,它管理容器生命周期。
docker镜像是一个虚拟的概念,是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含一些为运行时准备的一些配置参数(如环境变量)。
容器的实质是进程,它与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。有独立的文件系统、网络、进程空间等。
主要用于集中的存储和分发镜像。
二、安装
官方仓库里有docker-ce软件包,我是使用下面的方式安装的。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
前面的命令由curl下载install.sh脚本,bash -s使bash从stdin读取数据。
所以上面的命令就是下载安装脚本install.sh,并传入配置参数执行。
三、命令
#########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 image ls
#创建镜像
docker commit
#导入镜像
docker load
#拉取镜像
docker pull
#上传镜像
docker push
#删除镜像
docker rmi
#导出镜像
docker save
#为镜像标签
docker tag
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 | 进入容器后的默认目录 |
用于更新一个或多个容器的配置,可以是容器id,也可以是容器名,参数应该和run/create一样。
docker update [OPTIONS] CONTAINER [CONTAINER...]
通过它可以进入容器内部。
--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 | 进入的工作目录 |
四、常用方式
#复制原文件备份
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
# 获取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
// 上传
docker cp /路径/文件名 容器:/上传路径
// 下载
docker cp 容器:/上传路径 /路径/文件名