1. docker介绍、安装、基本命令

1 介绍

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件、IP地址、主机名等。
容器共用宿主机内核,不需要指令级模拟。

1.1 docker工作流程

1.2 docker核心技术

1.2.1 Namespace

实现Container的进程、网络、消息、文件系统和主机名隔离。目前linux内核实现的namespace主要有:

  1. Mount namespace(CLONE_NEWNS):系统挂载点
  2. UTS namespace (CLONE_NEWUTS):Hostname等信息
  3. IPC namespace(CLONE_NEWIPC):进程间通讯
  4. PID namespace(CLONE_NEWPID):进程号
  5. Network namespace(CLONE_NEWNET):网络相关资源
  6. User namespace(CLONE_NEWUSER):用户ID

1.2.2 Cgroup

实现对资源(cpu个数、内存大小等)的配额和度量

1.3 docker特性

  • 文件系统隔离:每个容器运行在完全独立的根文件系统里
  • 资源隔离:系统资源,像CPU和内存可以分配到不同的容器中,使用cgroup
  • 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址
  • 日志记录:Docker收集和记录每个进程容器的标准流(stdout/stdin/stderr),用于实时检索或批量检索
  • 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的container,无需使用模版或手动配置。
  • 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell

1.4 container运行条件

docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态,否则这个容器就会处于退出状态。
业务在容器中运行:夯住,启动服务

1.5 container运行时覆盖3个文件

容器运行时,会覆盖/etc/hostname/etc/hosts/etc/resolve.conf这3个文件。使容器有自己的主机名、hosts解析、dns服务器

2 安装

2.1 安装环境依赖

yum -y install yum-utils device-mapper-persistent-data lvm2

2.2 安装yum源

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3 yum安装

yum install -y docker-ce docker-ce-cli containerd.io

2.4 启动docker

systemctl start docker
systemctl enable docker

2.5 镜像加速

镜像可以添加多个,中间用,分隔

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://阿里云页面查看.mirror.aliyuncs.com","http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.6 默认root目录

/var/lib/docker

2.7 开启路由转发功能

yum安装后默认会开启,确认方式

cat /proc/sys/net/ipv4/ip_forward
1

手动开启方法

vim /etc/sysctl.conf
...
net.ipv4.ip_forward = 1

sysctl -p

2.9 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.10 重启docker

重启docker,调用内核模块netfilter增加规则

systemctl restart docker

2.11(可选)重启docker容器不会停止

修改配置文件/etc/docker/daemon.json一般不建议配置

{
  "registry-mirrors": ["..."],
  "live-restore": true
}
sudo systemctl daemon-reload
sudo systemctl restart docker

3 基本命令

3.1 docker info

docker info查看基本信息:

  • 默认工作目录:/var/lib/docker
  • 默认请求的镜像仓库:https://index.docker.io/v1/
  • 自己配置的镜像仓库:Registry Mirrors部分
Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs

 Docker Root Dir: /var/lib/docker             #默认工作目录
 Debug Mode: false
 Registry: https://index.docker.io/v1/        #默认请求的镜像仓库

 Registry Mirrors:                            #镜像仓库
  https://bigsky000.mirror.aliyuncs.com/

3.2 docker search

docker search [OPTIONS] image 搜索镜像

[root@centos7-wht ~]# docker search centos
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                            The official build of CentOS.                   6638      [OK]       
ansible/centos7-ansible           Ansible on Centos7                              134                  [OK]
consol/centos-xfce-vnc            Centos container with "headless" VNC session…   129                  [OK]
jdeathe/centos-ssh                OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   118                  [OK]
centos/systemd                    systemd enabled base container.                 100                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   89                    


#NAME:镜像名字,/前是项目名,/后是镜像名
#OFFICIAL:是否 docker 官方发布
#STARS:表示点赞、喜欢的意思
#AUTOMATED:自动构建

3.3 docker pull

docker pull [OPTIONS] NAME[:TAG|@DIGEST] 拉取镜像

docker pull centos                                   #从默认仓库中下载镜像
docker pull hub.c.163.com/library/tomcat:latest      #直接下载其他站点的镜像

3.4 docker load

dokcer load -i image位置 导入已经下载好的docker镜像

3.5 docker images/docker image

3.5.1 docker images

查看现有镜像

[root@centos7-wht ~]$  docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
busybox                  latest    69593048aa3a   7 weeks ago    1.24MB
127.0.0.1:5000/busybox   v1        69593048aa3a   7 weeks ago    1.24MB
registry                 latest    1fd8e1b0bb7e   3 months ago   26.2MB
centos                   centos7   8652b9f0cb4c   8 months ago   204MB

127.0.0.1:5000/busybox,这类的镜像名表示镜像来自127.0.0.1:5000仓库,而非docker-hub官方库

3.5.2 docker image

镜像相关操作

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

例子:
registry镜像打包成registry.tar文件

docker image  save -o registry.tar registry

载入tar格式的registry.tar镜像

 docker image load -i registry.tar

3.6 docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行一个container
OPTIONS 常用参数:

通常-i和-t配合使用
-i                        以交互模式运行

-t                        为容器分配一个伪输入终端

-d                        后台运行容器,并返回容器ID

-c                        接在bash COMMAND后,为container中bash运行的命令

-c --cpu-shares           后面接数字,限制容器的cpu权重,默认权重是1024

-m --memory               单位b, k, m, or g,限制容器的内存使用量

-p                        将host端口映射给container端口,默认是tcp端口,要映射多个端口写多个-p
                          eg:ip:[hostPort]:containerPort | hostPort:containerPort | hostPort:containerPort:udp

-P                        随机将一个host端口映射给container

--name                    后面接container名字

-h                        后面接container的主机名

--restart                 always:在容器退出时总是重启容器,容器会伴随docker启动
                          no:默认策略,容器退出时不重启
                          on-failure:在容器非正常退出时(退出状态非0),才会重启
                          on-failure:3:在容器非正常退出时(退出状态非0),最多重启3次
                          unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

-v                        HOST-DIR:CONTAINER-DIR[:权限] 将容器内部的目录mount到host的目录下,权限是rw、ro等以逗号分隔,要mount多个目录写多个-v参数
                          volume:CONTAINER-DIR,容器在/var/lib/docker/volumes目录下创建数据卷,删除容器后数据卷不消失

--mount                   默认:source=volume名字,destination=CONTAINER-DIR。默认情况下用来挂载volume,但也可以用来创建bind mount和tmpfs。
                          bind mount:type=bind,source=HOST-DIR,destination=CONTAINER-DIR,source必须是绝对路径,且路径必须已经存在。

--volumes-from            挂载已有的数据卷

-e                        设置container内部的环境变量,eg: -e "SSH_PWD=123",SSH_PWD为容器内部定义的变量

--privileged              Docker将启用对宿主机上所有设备的访问,允许容器对宿主机的访问几乎与在宿主机上容器外部运行的进程相同,可以直接挂载宿主机的磁盘

--rm                      容器命令运行结束后,自动删除容器,自动释放资源

--device                  onhost:incontainer[:mode],将host的设备映射给container,/dev/sdc:/dev/xvdc:rwm

--device-write-bps        单位kb、mb、gb,限制容器写IO速度

--device-read-bps         单位kb、mb、gb,限制容器读IO速度

--ip                      设置容器的IPv4地址

--network                 设置容器连接的网络,默认是docker0

例子:
以交互模式运行centos,并运行container中的bash

docker run -it  centos:latest  bash

后台运行container,每隔10s不断输出hello world

docker run -d  centos:latest  bash -c "while true;do echo hello world;sleep 10;done"

3.7 docker ps

docker ps列出正在运行的容器状态


docker ps -a列出所有容器的状态,包括沉睡/退出状态的容器

docker ps -q 只显示容器的CONTAINER ID
docker ps -l 只显示最后创建的容器信息
docker ps --no-trunc 不缩略,显示容器的全部信息

3.8 docker logs

docker logs 容器ID/名字从容器中取日志,检查docker的标准输出。

docker logs 4336a96cc275
hello world
hello world
hello world

3.9 docker kill

docker kill 容器ID/名字杀死一个container实例

3.10 docker rename

docker rename 旧容器名 新容器名 更改容器名

3.11 docker update

docker update 参数 容器ID/名字 更新容器参数,只能更新cpu、内存、io、pid策略、重启策略

docker update --restart always centos

3.12 docker exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 进入创建一个伪终端,类似于ssh,不会因为输入exit而终止容器
OPTIONS 常用参数:

通常-i和-t配合使用
-i                        以交互模式执行
-t                        为容器分配一个伪输入终端

-d                        后台执行

例子:
以交互模式在container中运行bash

docker exec -it centos bash

3.13 docker attach

会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程。会进入第1个伪终端。

3.14 临时回到host主机

ctrl+p,ctrl+q 临时回到host主机
docker attach ...再次回到docker伪终端

3.15 docker rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]删除已经建立的容器
删除建立的所有容器

docker rm -f `docker ps -a -q` 

3.16 docker inspect

docker inspect [OPTIONS] 容器NAME|容器ID [NAME|ID...] 查看容器的祥细信息

docker inspect ssh_nginx
[
    {
        "Id": "973c9487f8dbf2c6dfa5c443dd3b2697eced2ac78d896dd9cd50b00cf87f6816",
        "Created": "2021-09-01T08:32:08.645237423Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23325,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-09-01T08:32:08.951092626Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...

3.17 docker build

以dockerfile创建镜像,PATH为dockerfile所在目录
docker build -t name:tag PATH

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,000评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,745评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,561评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,782评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,798评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,394评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,952评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,852评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,409评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,483评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,615评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,303评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,979评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,470评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,571评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,041评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,630评论 2 359

推荐阅读更多精彩内容