Docker Notes

一.Docker Notes

1.Docker相关网址
2.概念区分

3.Docker的相关文件

4.Docker的安装及卸载

5.Docker所有的相关命令
6.分类总结
7.如何搭建私有Docker Registry(2.0版本)


二.Docker相关问题修复

1.Can’t connect to ‘docker’ daemon. please fix and retry.



一.Docker Notes


1.Docker相关网址




2.概念区分

镜像,容器

docker镜像:镜像中为容器要运行的应用程序及应用程序执行所需的库,配置文件,可执行程序和其它组件
docker容器:Docker镜像的运行实例,该实例可能正在运行,暂停或已经停止
处理镜像和容器有着不同的命令

registry,repository,image,tag

拉取一个镜像时的完整写法为:

<registryName>/<repositoryName>/<imageName>:tag

以Docker Hub(docker.io)这个registry为例:

  • registryName:docker.io
  • repositoryName:DockerHubID(Docker Hub以你的DockerHubID作为namespace,对各个镜像进行隔离)
  • imageName:各个镜像名
  • tag:不写默认为latest

其中的registry有多个,例如在fedora30中我们查找docker的配置文件发现其配置的registry有如下这么多个:
[registries.search]
registries = [‘docker.io’, ‘registry.fedoraproject.org’, ‘quay.io’, ‘registry.access.redhat.com’, ‘registry.centos.org’]

在这里插入图片描述总结一下上面的查找过程:

[sky@localhost ~]$ su
密码:
[root@localhost sky]# find /etc -name docker
/etc/docker
/etc/sysconfig/docker
[root@localhost sky]# ls -alF /etc/docker/
总用量 40
drwxr-xr-x. 3 root root 4096 5月 24 00:02 ./
drwxr-xr-x. 149 root root 12288 5月 25 08:27 …/
drwxr-xr-x. 4 root root 4096 5月 23 23:59 certs.d/
-rw-r–r--. 1 root root 441 6月 27 2018 docker-lvm-plugin
-rw-------. 1 root root 244 5月 24 00:02 key.json
-rw-r–r--. 1 root root 11924 4月 23 01:45 seccomp.json
[root@localhost sky]# ls -alF /etc/sysconfig/docker
-rw-r–r--. 1 root root 912 4月 23 01:45 /etc/sysconfig/docker
[root@localhost sky]# gedit /etc/sysconfig/docker

通过观察,发现:/etc/sysconfig/docker应为docker的相关参数的配置文件,打开该文件查看:

在这里插入图片描述

Do not add registries in this file anymore. Use /etc/containers/registries.conf
instead. For more information reference the registries.conf(5) man page.

由此处发现docker相关的registry的配置改为了放在/etc/containers/registries.conf这个配置文件中,下面打开这个文件查看:

在这里插入图片描述可以看到fedora30中配置的默认查找的registry不仅仅只有一个Docker Hub(docker.io),而在ubuntu中是没有这种配置文件的,在ubuntu中默认的方式是所有的镜像都在Docker Hub(docker.io)中查找,而由于fedora为RHEL的新特性试验版,许多新特性都会被加入到其中,故我们才会看到这么多的registry,如果你用的是ubuntu,可以放弃上述查找过程,我在ubuntu中找过了,是没有的。




3.Docker的相关文件

如何找到Docker的系统配置文件:

$dpkg -l | grep docker 
$dpkg -L docker-ce
$dpkg -S docker 
$sudo gedit /etc/init/docker.conf

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

$sudo dpkg -L docker-ce-cli | less
$sudo dpkg-query -L docker-ce-cli | less

在这里插入图片描述

$sudo dpkg -L docker-ce | less
$sudo dpkg-query -L docker-ce | less

在这里插入图片描述

/usr/bin/docker 文件提供的主要就是docker命令,docker命令用来创建,操作和维护docker映像文件和容器。这个docker命令还作为守护进程运行,来提供docker服务

docker pull 下来的命令都默认存在 /var/lib/docker/文件夹下。
/var/lib/docker目录并不是docker-ce软件包的一部分,但是在安装docker软件时会创建该目录。当创建docker映像文件和容器时,它们会被保存在这个目录中。
在这里插入图片描述
在这里插入图片描述有上图可知:
如需删除镜像,容器,卷及自定义的配置文件:

$sudo rm -rf /var/lib/docker

删除拉取的镜像

$sudo rm -rf /var/lib/docker/overlay2



4.Docker的安装及卸载

4.1官网安装说明

各种系统的Docker Engine社区版安装说明(products->Docker Engine):https://hub.docker.com/search/?type=edition&offering=community

4.2ubuntu上安装docker

官网安装教程:https://docs.docker.com/install/linux/docker-ce/ubuntu/

具体的各种安装细节请详见官方资料,我不可能比它介绍的更好,命令什么复制粘贴就可以,说一下安装后遇到的一个小问题:
在这里插入图片描述没错,就是又permission denied 了,sudo一下就好了,但为了避免频繁使用命令sudo执行Docker命令,可将当前用户加入用户组docker中以获取权限。注意:如果更改了已登陆系统账户所属的用户组,该用户必须退出系统后在登陆,组关系的更改才能生效
sudo usermod -aG docker ${USER}

在这里插入图片描述因为没有重启电脑上述命令任未起作用。重启电脑后发现组更改生效。
即可每次直接执行docker命令而不用先sudo。
在这里插入图片描述






4.3删除docker

删除所有与docker相关的软件包
dpkg -l | grep docker
在这里插入图片描述注意以上命令只会卸载docker的软件安装包,不会删除docker存储的文件
下面删除Docker存储的文件,如镜像,容器,卷等信息,所有这些文件位于/var/lib/docker目录中,需手动删除。

$sudo rm -rf /var/lib/docker

在这里插入图片描述
检查所有文件是否已经删除干净
在这里插入图片描述






5.Docker所有的相关命令

$man docker 显示docker命令的联机帮助页

docker命令

docker<Tab>
docker  <Tab><Tab>:docker命令内置了tab补全(默认shell为bash shell)

在这里插入图片描述
·查找Docker组件的信息:

    $docker help 		显示可用命令
	$docker <command> --help 显示可用命令的具体用法
	$docker version
	$docker info 	显示docker系统信息
	$docker history  	镜像历史
	$docker inspect 	查看容器或镜像的信息
	$docker port		 列出容器的端口映射

·操作正在运行的容器:

 $docker ps		正在运行的容器
 $docker ps -a	所有运行过的容器
 $docker ps -s	可以查看每个容器消耗了多少空间(SIZE)
 $docker ps -a -s 
容器实际上很小:因为容器的大小只是容器的起始镜像加上额外运行的命令的大小
$docker attach	将另一个命令附加到正在运行的容器上
$docker exec 	在正在运行的容器中执行命令
$docker inspect	审查容器元数据
$docker cp		从容器向宿主机系统复制文件
$docker diff		检查容器从启动后其文件系统所作的改变

·操作镜像

    $docker images  <imagename>	列出系统上的镜像
	$docker run		运行镜像:运行后的容器会留在系统上,准备被重启或被保存为镜像
	$docker run --rm	   --rm选项:确保运行后的容器不会留在系统上
	$docker pull		从dockerhub向本地系统拉取镜像
	$docker push	向Docker Hub推送镜像,注意推送前需先使用docker login及docker tag命名
	$docker rmi <imageName>/<imageId>......
	$docker rmi -f $(docker images -q)		不使用-f选项,不用此种方法
	$docker rmi $(docker images -q)		-q选项:仅获取镜像ID列表
	$docker save		将镜像文件保存为tarball文件即归档文件,文件扩展名为.tar(将docker镜像保存到文件系统时它会保存为一个tarball文件,这个tarball文件可以像其它文件一样传输,之后可以在运行docker的本地系统是那个导入并作为容器运行)
	$docker save busybox > busybox.tar
	$docker save --output busybox.tar busybox
	$docker load		从tarball文件加载本地镜像
	$docker load < busybox.tar
	$docker load --input busybox.tar
	$docker export		从容器中将文件系统导出成本地的tarball文件

·操作Docker Registry

$docker login		登陆到DockerR Hub Registry(你就能用自己的账号来推送和拉取镜像)
$docker logout		从docker hub registry登出
$docker search 		使用一个term即可搜索带有term的镜像

·修改现存的镜像

$docker tag			为镜像添加一个名字(在推送镜像之前,需要重新根据DockerHub的规则标注镜像:Docker Hub允许向以你的Docker Hub ID开头的镜像仓库推送镜像,用法为docker tag <imageName> DockerHubId/imageName或DockerHubID/repoName/imageName.注意这不会重新创建一个镜像,而是给同一个镜像创建一个额外的标签)
$docker rename		修改镜像的名称

·修改容器的状态

$docker stop		停止正在运行的容器
$docker start		启动一个已经停止的容器(注意:docker run从原始镜像运行一个新容器,而docker start从容器被停止时的状态重新启动一个容器,此时你添加的软件或修改的文件还在那)
$docker pause	暂停容器
$docker unpause	恢复暂停的容器
$docker kill		向容器发送kill信号或其它信号
$docker restart	docker stop+docker start停止并重新启动容器

·查看年Docker的活动

$docker events	查看Docker服务器的状态
$docker top		查看容器的进程活动
$docker logs		查看由容器产生的日志消息
$docker stats	查看容器的cpu和内存使用情况
$docker wait		查看容器直到它停止,然后打印它的退出代码

·创建镜像和容器

    $docker build -t<DockerHubID/privateRepositoryIP:privateRepositoyPort>/<imageName>(:tag)	  从Dockerfile开始构建镜像
	$docker commit		从容器创建镜像先使用exit命令退出容器,将容器保存为一个镜像,以后就可以复用该容器了。
    $docker commit -a "My custom Fedora" 36b17a24b07e my_fedora
	$docker create		从镜像创建容器但不运行它
	$docker import		将文件系统导入镜像中

·删除镜像和容器

$docker rm		删除已停止的容器
$docker rmi		删除镜像



6.分类总结

·Docker镜像常用命令

$docker search 
$docker pull
$docker push
$docker images
$docker rmi <imageName>
$docker rmi -f $(docker images -q)
$docker save
$docker load
$docker build

·Docker容器常用命令<cotainerName/containerID>

$docker run   -d(后台模式)/-it(前台交互模式)      -p hostIp:hostPort:containerPort -name <containerName> <imageName>
$docker ps
$docker ps -a
$docker stop <cotainerName/containerID>
$docker kill <cotainerName/containerID>
$docker start -i <cotainerName/containerID>	-i选项:会将容器的输出定向到本地shell(STDOUT)
$docker restart <cotainerName/containerID>
进入容器:docker exec,docker attach,nsenter
$docker docker attach <containerID>	进入容器,但当多个窗口同时attach到同一个容器时,所有窗口都会同步显示,存在同步阻塞问题。使用nsenter工具

$docker ps
$docker inspect --format “{{State.Pid}}” <containerID>
$nsenter --target <Pid> --mount --uts --ipc --net --pid

$docker exec -it <containerID> /bin/bash

删除容器:每次运行容器镜像或者将容器提交commit给镜像时都会消耗磁盘空间(docker rm+rmi)
$docker rm <cotainerID>
$docker rm -f $(docker ps -a -q)	docker ps 的-q选项:静默模式,只显示容器的ID

$docker export <containerName> > 文件名.tar
$docker export --output/-o “文件名.tar” <cointainerName>
$docker import 文件名.tar <imageName>

$ nsenter --help
用法:
nsenter [选项] [<程序> [<参数>…]]
以其他程序的名字空间运行某个程序。
选项:
-a, --all enter all namespaces
-t, --target 要获取名字空间的目标进程
-m, --mount[=<文件>] 进入 mount 名字空间
-u, --uts[=<文件>] 进入 UTS 名字空间(主机名等)
-i, --ipc[=<文件>] 进入 System V IPC 名字空间
-n, --net[=<文件>] 进入网络名字空间
-p, --pid[=<文件>] 进入 pid 名字空间
-C, --cgroup[=<文件>] 进入 cgroup 名字空间
-U, --user[=<文件>] 进入用户名字空间
-S, --setuid 设置进入空间中的 uid
-G, --setgid 设置进入名字空间中的 gid
–preserve-credentials 不干涉 uid 或 gid
-r, --root[=<目录>] 设置根目录
-w, --wd[=

] 设置工作目录
-F, --no-fork 执行 <程序> 前不 fork
-Z, --follow-context 根据 --target PID 设置 SELinux 环境
-h, --help display this help
-V, --version display version

·Dockerfile常用命令




7.如何搭建私有Docker Registry(2.0版本)

官方教程网址:https://docs.docker.com/registry/

$ docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
$ docker run -d -p 5000:5000  --name registry2 registry:2

Basic commands

Start your registry

docker run -d -p 5000:5000 --name registry registry:2

Pull (or build) some image from the hub

docker pull ubuntu

Tag the image so that it points to your registry

docker image tag ubuntu localhost:5000/myfirstimage

Push it

docker push localhost:5000/myfirstimage

Pull it back

docker pull localhost:5000/myfirstimage

Now stop your registry and remove all data

docker container stop registry && docker container rm -v registry



二.Docker相关问题修复



1.Can’t connect to ‘docker’ daemon. please fix and retry.

Possible causes:

  • Docker Daemon not started
    • Linux: confirm via your init system
    • macOS w/ docker-machine: run docker-machine ls and docker-machine start <name>
    • macOS w/ Docker for Mac: Check the menu bar and start the Docker application
  • DOCKER_HOST hasn’t been set or is set incorrectly
    • Linux: domain socket is used, DOCKER_* should be unset. In Bash run unset ${!DOCKER_*}
    • macOS w/ docker-machine: run eval "$(docker-machine env <name>)"
    • macOS w/ Docker for Mac: domain socket is used, DOCKER_* should be unset. In Bash run unset ${!DOCKER_*}
  • Other things to check:
    • Linux: User isn’t in ‘docker’ group. Add and relogin.
      • Something like sudo usermod -a -G docker ${USER}
      • RHEL7 bug and workaround: https://bugzilla.redhat.com/show_bug.cgi?id=1119282#c8






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

killingwill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值