Docker学习笔记 2020-10-22

安装在CentOS 7.6 64bit 。系统内核要求在3.10以上。
容器是独立运行的一个或一组应用,及他们的运行环境。

1.查看系统内核

uname -r

2.安装命令

yum -y install docker-io

3.启动命令

service docker start

4.查看版本

docker version

5.查看所有容器

docker ps -a
docker ps 查看运行容器

6.启动容器

docker start [name]

7.停止容器

docker stop [name]

8.删除容器

docker rm [name]
docker rm -f 强制删

9.进入容器

docker exec -it [name] /bin/bash

10.创建镜像

①docker commit -m '例如git注释' -a 'author' 镜像id 镜像命名
docker commit -m 'create image' -a 'Nan' 7b789b19757d my/image:v1
②Dockerfile
使用Dockerfile来创建镜像,使用docker commit 虽然很容易拓展镜像,但不便于团队分享,我们可以使用docker build来创建一个新的镜像,为此首先要创建一个Dockerfile文件,这个文件中包含如何创建镜像的指令。
a.首先新建一个目录和Dockerfile
b.Dockerfile中输入指令,每条指令都创建镜像的一层。层数有限制,不能超过127,否则会报错。

cd docker
mkdir centos
cd centos
touch Dockerfile
vim Dcokerfile
# 注解
FROM centos    //FROM  以哪个镜像为基础
MAINTAINER NAN xxxx   //维护者信息
RUN yum -qqy install python   //RUN 开头的指令会在创建中运行,例如yum安装python。yum需要指定参数,不加-qqy可能会报错

docker build -t='my/centos_with_python:v1.0.1' .
这个.很重要,意味着从当前路径去找Dockerfile文件读取文件,构建镜像
※在build进程在执行操作。它要做的第一件事情就是上传这个Dockerfile内容,因为所有的操作都要依据Dockerfile来进行。然后,Dockerfile中的指令被一条一条的执行。每一步都创建一个新的容器,在容器中执行指令并提交修改(就跟docker commit 一样)。当所有指令完成,返回最终的镜像id。所有中间步骤所产生的容器都被删除和清理。
不能超过127层。
Dockerfile中还可以输入其他的命令,例如可以使用ADD命令复制本地文件到镜像中;用expose命令对外开放端口;用CMD命令描述容器启动后运行的程序。

11.运行镜像

docker run -t -i my/image:v1
参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。-d在后台以守护态运行(daemen)。
使用docker run 命令来启动容器,docker在后台运行的标准操作包括
a.检查本地是否存在指定的镜像,不存在则从公有仓库下载
b.使用镜像创建并启动容器
c.分配一个文件系统,并在只读的镜像层外面挂在一层可读可写层。
d.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
e.从地址池分配一个ip地址给容器
f.执行用户指定的应用程序
g.执行完毕之后容器被终止

后台运行的容器我们怎么进入:

①docker attach 是docker自带的命令。
docker attach 容器名
该命令有时候并不方便,因为它是同步的,如有多个用户attach到一个容器,一个窗口命令阻塞,其他窗口都无法执行。
②nsenter命令:在util-linux包2.23版本后都有包含。nsenter可以访问另一个进程的进程空间。
安装:

wget ...util-linux...
tar 解压
cd 
./configure 配置
cp nsenter /user/local/bin

为了连接到容器,需要知道容器的PID,可以使用nsenter获取,如下:
PID=$(docker-pid 容器id)
docker-pid需要自己安装,否则找不到命令
配好之后,获取到PID后,
nsenter --target 3291 --mount --uts --ipc --new --pid进入容器

12.修改镜像标签

docker tag 镜像ID 修改后标签名

13.导入镜像

必须是.tar.gz或tart 文件
cat ubuntu_elm.tar | docker import -my/ubuntu_elm:v1.1.0

14.上传镜像

用户可以通过docker push命令,把自己创建的镜像上传到仓库中共享。
docker push 镜像名

15.保存镜像到本地

docker save -o 保存的镜像的名字 docker中镜像的名字

16.将本地保存的镜像导入到docker

①docker load --input 镜像名
②docker load < 镜像名

17.删除镜像

docker rmi image_id
docker rmi -f image_id 强制删除

18.打印容器日志

docker logs 容器id

19.导出容器

docker export 容器id > 容器名

20.导入容器

cat centos.tar | docker import - my/centos:v1
还可以通过指定一个URL或者目录来导入。
docker import http://..... 镜像名
docker中可以使用docker load来导入镜像,也可以使用docker import 来导入一个容器快照到docker镜像。两者的区别是容器快照将丢失所有的历史记录和元数据信息。而镜像保存完整的记录,因此也更大一些。

Docker公有仓库 Docker Hub

仓库是集中存放镜像的地方。容易混淆的是注册服务器,它是管理仓库的服务器,每个服务器上可以有多个仓库,每个仓库下可以有多个镜像。因此仓库可以被认为是一个具体的目录。
例如,dl.dockerpool.com/centos来说,dl.dockerpool.com是注册服务器地址,centos是一个仓库名字。

Docker官方目前维护着一个公共仓库,我们要是用这个仓库,需要登录https://hub.docker.com网站,注册一个账号

在命令行中输入docker login输入用户名密码完成登录。
成功后,本地用户目录的.docker目录中将保留用户的认证信息。

要推送镜像到Docker Hub,需要先登录账号,然后使用docker push 镜像名 推送镜像

Docker 私有仓库

有时候,在公司内部为了提高分享的速度,需要在公司内部搭建一个本地仓库,供个人使用。

docker官方提供了一个工具docker-registry,我们可以借助这个工具构建私有镜像仓库
a.首先,使用docker search命令查找registry
b.docker pull registry
c.运行registry : docker run -d -p 5000:5000 -v /root/docker/registry:/tmp/registry registry
默认情况下,仓库会创建在容器中的/tmp/registry目录下,通过-v指定将镜像文件存放在本地的目录中。
d.搭建好了私有仓库后,就可以上传、下载、搜索镜像了。
e.查看本机ip地址:ifconfig 。将镜像名字的前缀改成本机ip加端口 192.168.0.150:5000
f.docker push 192.168.0.150:5000/centos将镜像推送到私有仓库。
g.局域网内其他机器可以使用docker pull 镜像名拉取镜像。

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