docker配置

一、安装docker

#加载docker-ce镜像源并安装docker
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker
docker run hello-world

#配置镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3q8h3768.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker run hello-world

二、常用命令

1.帮助启动类命令

启动docker: systemctl start docker
停止docker: systemctl stop docker
重后docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档:docker 具体命令 --help

2.镜像命令

docker images:列出本地主机上的镜像

-a:列出本地所有的镜像
-q :只显示镜像ID

docker search 某个xxx镜像名字:云端镜像查找

#--limit:只列出N个镜像,默认25个
docker search --limit 5 redis

docker pull 镜像名字:下载镜像

docker pull 某个xxx镜像名字
docker pull 镜像名字[:TAG]    #(TAG版本号,不写默认latest)

docker system df查看镜像/容器/数据卷所占的空间
docker rmi 某个xxx镜像名字ID:删除镜像

-f 强制删除
docker rmi -f 镜像ID    #删除单个
docker rmi-f 镜像名1:TAG 镜像名2:TAG    #删除多个
docker rmi -f $(docker images) -qa    #删除全部

面试题:
谈谈docker虚悬镜像是什么?
答:仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image
后续Dockerfile章节再介绍
如何查看当前机器下有多少个容器,多少个镜像?
答:docker system df

3.容器命令

①新建+启动容器:docker run [OPTIONS]IMAGE[COMMAND][ARG...]

OPTIONS说明(常用)
--name="容器新名字"
为容器指定一个名称;
-d:后台运行容器并返回容器D,也即启动守护式容器(后台运行):
-i:以交互模式运行容器,通常与t同时使用    #interactive
-t:为容器重新分配一个伪输入终端,通常与-ⅰ同时使用;也即启动交互式容器(前台有伪终端,等待交互)    #tty
-P:随机端口映射,大写P
-p:指定端口映射,小写p

②启动交互式容器(前台命令行)

docker run -it centos /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
centos:centos 镜像。
/bin/bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是/bin/bash。
要退出终端,直接输入 exit

③列出当前所有正在运行的容器:docker ps
④退出容器

exit
run进去容器,exit退出,容器停止run进去容器
ctrl+p+q退出,容器不停止

⑥启动己停止运行的容器:docker start 容器id或者容器名
⑦重启容器:docker restart 容器id或者容器名
⑧停止容器:docker stop 容器id或者容器名
⑨强制停止容器:docker kill 容器id或者容器名
⑩删除己停止的容器:docker rm 容器id或者容器名

#强制删除所有容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

重要
①启动守护式容器(后台服务器):docker run -d redis

若使用-d开启centos会自动秒关闭,因为没有前台守护进程,redis则有

②查看容器日志:docker logs 容器id
③查看容器内运行的进程:docker top 容器
④查看容器内部细节:docker inspect 容器,可以查看容器数据卷挂载信息
⑤进入正在运行的容器并以命令行交互docker exec -it 容器ID /bash/shell
重新进入docker attach 容器ID

上述两个区别
attach 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止

进入redis容器
docker exec-it 容器ID /bin/bash
docker exec-it 容器ID redis-cli
一般用-d后台启动的程序,再用exec进入对应容器实例

⑥从容器内拷贝文件到主机上:docker cp 容器ID:容器内路径目的主机路径
⑦导入和导出容器:
export 导出容器的内容留作为一个tar归档文件[对应import命令]
import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]

docker export 容器ID>文件名.tar 
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

4.自定义镜像

1.安装自定义软件
agt-get update
apt-get -y install vim
2.封装为镜像

docker commit -m="备注内容" -a="作者" 容器id 构建的镜像名称:[标签名]

[root@lizj ~]# docker commit -m="vim cmd add ok" -a=" lizj" c1839f522391 atlizj/
sha256:741af495beca86a010862bddbcc852c4c4cc22ca2814b931095d41d2a43d8d65
3.镜像发布到阿里云容器镜像服务

命名空间>镜像仓库
① 登录阿里云Docker Registry
$ docker login --username=lzj952809310 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。

②从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[镜像版本号]
③将镜像推送到Registry

$ docker login --username=lzj952809310 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

3.构建本地私有仓库
docker pull registry
docker run -d -p 5000:5000 -v /lizjuse/myregistry/:/tmp/registry                                                                          --privileged=true registry

-v /lizjuse/myregistry/:/tmp/registry指定目录。默认情况,仓库被创建在容器的/var/lib/registry目录下建议自行用容器卷映射,方便于宿主机联调
查看当前本地仓库下的存储情况curl -XGET http://172.21.55.100:5000/v2/_catalog
复制镜像并修改名称docker tag 镜像:Tag Host:Port/Repository:Tag

[root@lizj ~]# docker tag atlizj/myubuntu:1.3 172.21.55.100:5000/myubuntu:1.3
[root@lizj ~]# docker images
REPOSITORY                                          TAG       IMAGE ID       CREATED             SIZE
172.21.55.100:5000/myubuntu                         1.3       741af495beca   About an hour ago   188MB
atlizj/myubuntu                                     1.3       741af495beca   About an hour ago   188MB
registry.cn-hangzhou.aliyuncs.com/atlizj/mycentos   1.3       741af495beca   About an hour ago   188MB

取消https限制:

[root@lizj ~]# vim /etc/docker/daemon.json
[root@lizj ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://3q8h3768.mirror.aliyuncs.com"],
  "insecure-registries": ["172.21.55.100:5000"]
}

上传

[root@lizj ~]# docker push 172.21.55.100:5000/myubuntu:1.3                      The push refers to repository [172.21.55.100:5000/myubuntu]
130e2e093af5: Pushed
9f54eef41275: Pushed
1.3: digest: sha256:d974a028cd47ddb69094df75e8ebfce6d70e2092600bbdd530af4b69a895de18 size: 741

[root@lizj ~]# curl -XGET http://172.21.55.100:5000/v2/_catalog
{"repositories":["myubuntu"]}

4.容器数据卷

指的是服务器指定文件夹挂载到容器中
docker run -d -p 50 0:5000 -v /lizjuse/myregistry/:/tmp/registry:ro --privileged=true --name u1 registry
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:读写权限 镜像名
容器内读写权限限制
rw:读写(默认)、ro:read only只读
Docker挂载主机目录访问如果出现cannot open directory.: Permission denied
解决办法: 在挂载目录后多加一个--privileged=true参数即可
不同容器的数据卷的继承:docker run -it --privileged=true -- volumes- from u1 --name u2 ubuntu

三、理论知识

1.解析hello-world镜像运行

[root@lizj ~]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

步骤如下:
1.查找是否有hello-world镜像,无则下载,有则运行为容器
2.运行结束后关闭hello-world镜像容器


2.容器比虚拟化快的原因

(1)docker有着比虚拟机更少的抽象层

由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源因此在CPU、内存利用率上docker将会在效率上有明显优势。

(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程.因此新建一个docker突器只需要几秒钟。


3.镜像

①UnionFS(联合文件系统):分层、轻量、可聚合的镜像基础,支持对文件系统的修改作为一次叠加来一层层提交。
②镜像加载原理:一层层的文件系统组成(UnionFS)
docker镜像层只是可读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层(rootfs)”

4.面试题

①谈谈docker虚悬镜像是什么?
答:仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image
②如何查看当前机器下有多少个容器,多少个镜像?
答:docker system df
③进入真正在运行的容器的两种方式是什么?区别是什么?一般用哪个?
答:docker exec -it 容器ID /bash/shelldocker attach 容器ID
attach 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。

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

推荐阅读更多精彩内容