deepin 20.8安装docker(docker使用知识)

阅读数:167 评论数: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,并传入配置参数执行。

三、命令

#########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

1、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 进入容器后的默认目录

2、docker update

用于更新一个或多个容器的配置,可以是容器id,也可以是容器名,参数应该和run/create一样。

docker update [OPTIONS] CONTAINER [CONTAINER...]

3、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 进入的工作目录

四、常用方式

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 容器:/上传路径 /路径/文件名



相关推荐

目的 在你的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 目录存放的是创建好的容器和主机有关的配置,因为这类配置和本地环境有关,所以不方便放入镜像之中,所以就放在这里。

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

一、概述     Docker Compose 是 Docker 提供的一个工具,用于定义和运行多容器的 Docker 应用。通过一个 YAML 文件,你可以配置应用的所有服务,然后使用一个命令来创建

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