ubuntu 安装docker

一、安装docker

docker状态 docker状态faileddocker状态 docker状态failed


docker状态 docker状态failed


docker状态 docker状态failed


1、安装docker:sudo apt-get install -y docker.io

2、启动docksudo cp config_sample.yml config.ymler服务:ctl start docker

4、查看docker状态:ctl status docker

5、停止docker服务:ctl stop docker

6、查看docker版本:docker version

二、非root用户运行docker

1、添加docker用户组:sudo groupadd如果创建时未指定 --restart=always ,可通过update 命令设置 docker

执行以上命令会提示已存在,原因是在安装docker时已自动创建。

2、将指定用户添加到用户组(username为你的用户名):sudo gpasswd -a username docker

3、查看是否添加成功:cat /etc/group | grep ^docker

3、重启docker:sudo ctl restart docker

6、执行docker命令,比如:docker ps -a

Docker 容器Dead状态怎么办

5、更新用户组:newgrp docker

Docker容器运行后,如何进入容器进行作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容总结器后,每个容器默认是没有配置SSH 的,安装配置SSHD,映射容器SSH端口,...

nas运行docker不休眠

可是,可是,这个真是有关系啊!

题主是否想询问“nas运行docker怎么不休眠”?

2、其次点击右上角设置,点击系统偏好设置。

3、点击“节能器”,cd /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/将进入休眠状态的时间设置为即可。

container 并非一直处于 running 状态

gunicorn --access-logfile - --debug -k gnt -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

次接触 docker,都会有个错觉,认为运行一个 container 就和运行一个虚拟机一样, docker run ... 之后,该 container 即一直处于 running 状态。

Sorry! You are absoluy wrong!

container 刚起来的时候,用户可以通过 dockerfile 中的 CMD,ENTRYPOINT,或者直接在 docker run 后面接 comand,来指定 container 启动时执行的程序。如果指定的程序只是一个短暂的任务,比如 echo sorry 。那么,sorry,container 在输出 “sorry” 之后,就退出了。可以通过 docker inspect 看到,container 状态变成了 Exited 。

有人说,这有什么关系,container 还在那里,没有销毁,只是状态值不是 running 而已。

一旦进入 Exited 状态,以下命令将不再 work:

这两个命令都需要 处于 running!

在非常不情愿接受以上事实之后,你或许马上想到了解决方案—— docker start

是的,没错!

但是,(很残忍滴告诉你)问题依然没有解决!

刚刚 start 的 container 在启动之后,会再一次执行 CMD 的命令。然后。。然后。。它又很快完成任务,进入 Exited 状态休息了。。。

如果启动一个 container 之后,想把它当做一个虚拟机使用(也就说,使用 docker exec 在 container 内部环境中运行程序),那么一定要保证这个 container 一直处于 running 的状态。

有两种情况需要考虑:

对于第二种情况,container 中一直运行着 web ,作为一个 serv,除非你主动 stop 它,这个 serv 会一直跑着。于是,起来的 container 也会一直 running,于是执行 docker exec 没有任何问题

对于种情况,很明显 cogunicorn --access-logfile - --debug -k gnt -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:applicationntainer 不久之后就会 Exited。让它一直处于 running 的方法至少有两种:

其中, docker ps -ql 用于获得最近创建的 container 的 id。这个方法的缺点在于,多创建了一个 image,占用空间。这里可能看不出来有啥影响,考虑 CI/CD 情形的话,这个缺点几乎是不能忍。

docker 作响应缓慢甚至timeout有什么可能的原因

sqlalchemy_index_database:_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/docker-registry/docker-regist2014-07-27 07:12:24 [29344] [INFO] Starting gunicorn 18.02014-07-27 07:12:24 [29344] [INFO] Listening at: (29344)2014-07-27 07:12:24 [29344] [INFO] Using worker: gnt2014-07-27 07:12:24 [29349] [INFO] Booting worker with pid: 293492014-07-27 07:12:24,807 DEBUG: Will return docker-registry.drivers.file.Storagery.db

本文指导何搭建私docker registry并确保其安全性本教程亲身体验传自制docker镜像私registry并同机器安全该其拉

本教程包含何容器化应用服务内容旨创建registry存储要部署服务资源想要docker入门教程许帮

基于Ubuntu14.04系统单registry单客户机模式本教程已经通测试许其基于debian发布仍运行

docker概念

前尚未接触docker需要花费几钟间熟悉docker关键概念docker已应手想解何构建私registry直接进入节

于新手该何使用docker妨试试docker笔记

docker核要应用及应用依赖与作系统离达述目docker采用容器与镜像机制docker镜像基本文件系统模板通docker run命令运行docker镜像该文件系统实例即激并且运行系统内docker容器默认该容器触及原始镜像及docker本身所运行主机文件系统环境

容器所做任何改都保存容器本身内并影响原始镜像想保留些改通docker commit命令容器保存镜像意味通原容器衍新容器原始容器(或镜像)造任何影响熟悉git觉该流程十眼熟:任意容器创建新支(支意思即docker镜像)运行镜像类似于执行git checkout作

更进步形容运行私docker registry比docker镜像运行私git仓库

docker registry应创建拥sudo权限用户(客户机)

docker registry软件款python应用使其能够运行起需要安装python发环境及必要库:

sudo apt-get updatesudo apt-get -y install build-essential python-dev libnt-dev python-pip liblzma-dev

第二步——安装并配置docker registry

安装新稳定docker registry发行版(作者撰文0.7.3译者译0.9.1)我使用python包管理工具pip:

sudo pip install docker-registry

docker-registry需要配置文件

默认pip该配置文件放置相偏僻系统python安装位置异找该路径我尝试运行registry查看相关输:

由于配置文件确位置述尝试失败告终并输条包含FileNotFoundError错误消息所示[某些版本述信息输译者注]:

FileNotFoundError: Heads-up! File is missing: /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml

registry同路径包含示例配置文件该文件名config_sample.yml我通述给路径名定位示例配置文件

错误消息路径信息(/usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config/config.yml)config.yml部除我切换该路径

config_sample.yml文件内容config.yml:

默认情况docker数据文件存放/tmp文件夹许类Linux系统系统重启该文件夹清空并我所希望我创建性文件夹存储数据:

面我配置config.yml文件文件夹/tmp引用更改/var/docker-registry首先首先找sqlalchemy_index_database首靠近文件首部行:

sqlalchemy_index_database:_env:SQLALCHEMY_INDEX_DATABASE:sqlite:////tmp/docker-registry.db

向点local:部重复述作更改内容:

local: &localstorage: localstorage_path: _env:STORAGE_PATH:/tmp/registry

:local: &localstorage: localstorage_path: _env:STORAGE_PATH:/var/docker-registry/registry

例配置文件其默认值均需修改目十行即想要做些复杂配置诸采用扩展存储装置存储docker数据该文件具功能已超本教程范围查看docker-registry文档获取更帮助

既配置文件已置于确位置再尝试测试docker registry:

看输:

棒极现我已经拥运行着docker registry面执行Ctrl+C终止该程序

目前止docker registry并用并自行启除非我执行述gunicorn命令另外docker registry没引入任何内置认证机制其前状态安全并且外部完全放

第三步——服务形式启docker registry

通创建Upstart脚本设置docker registry系统启程序始运行

首先创建志文件目录:

sudo mkdir -p /var/log/docker-registry

用款拿手文本编辑器创建Upstart脚本:

sudo nano /etc/init/docker-registry.conf

内容写入述脚本:

description "Docker Registry"start on runll [2345]stop on runll [016]respawnrespawn limit 10 5script exec gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gnt --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:5000 -w 8 docker_registry.wsgi:applicationend script

更关于Upstart脚本内容请阅读该教程

执行命令:

sudo serv docker-registry start

看面输:

docker-registry start/running, process 25303

通运行面命令查看server.log志文件验证docker-registry服务否运行:

tail /var/log/docker-registry/server.log

切看像前执行gunicorn命令输文本信息

既docker-registry已台运行面我配置Nginx使registry更加安全

docker 容器自动启动run

127,容器启动后,要执行的默认命令不存在

部署项目时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动。

Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。

Docker容器的重启策略如下:

no,默认策略,在容器退出时不重启容器

on-failure,在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3,在容器非正常退出时重启容器,最多重启3次

always,在容器退出时总是重启容器

unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

docker run的退出状态码如下:

0,表示正常退出

非0,表示异常退出(退出状态码采用chroot标准)

125,Docker守护进程本身的错误

126,容器启动后,要执行的默认命令无法调用

其他命令状sudo mkdir /var/docker-registry态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码

通过--restart选项,可以设置容器的重启策略,以决定在容器退出时Docker守护进程是否重启刚刚退出的容器。

--restart选项通常只用于detached模式的容器。

--restart选项不能与--rm选项同时使用。显然,--restart选项适用于detached模式的容器,而--rm选项适用于foreground模式的容器。

在docker ps查看容器时,对于使用了--restart选项的容器,其可能的状态只有Up或Restarting两种状态。

示例:

补充:

查看容器重启次数

查看容器一次的启动时间

在哪些情况下考虑用docker?

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1

根据Docker布道师Jerome Petazzoni的说法,Docker约等于LXC+AUFS(之前只支持ubuntu时)。其中LXC负责资源管理,AUFS负责镜像管理;而LXC又包括cgroup、namespace、chroot等组件,并通过cgroup进行资源管理。所以只从资源管理这条线来看的话,Docker、LXC、CGroup三者的关系是:cgroup在层落实资源管理,LXC在cgroup上封装了一层,Docker又在LXC封装了一层。Docker是Linux下应用容器引擎,提第步——安装必要软件供一种比LXC高级的API。Docker使用Go语言开发,利用了Linux提供的LXC,AUFS,namespace和cgroup技术。实现了文件系统,资源和网络的隔离,最终目标实现类似PaaS平台的应用隔离。

四、Docker网络揭秘

3、设置开机启动:ctl enable docker

Docker 之所以功能这么强大,其实就是充分利用了Linux Kernel的特性:NameSpace、CGroups、UnionFileSystem。通过这些特性实现了资源隔离、限制与分层等。本文这次就来揭晓Docker中的容器是如何做到网络互通的。

两台机器如果要实现通信,其实就是通过底层的网卡进行数据传输,每个网卡都有一个的MAC地址,网卡又会绑定一个ip地址,只要两台机器的网络可以互通,那么这两台机器就可以进行通信。

想要实现通信,就得有两个同一网段的网卡,两个网卡必须是可以 ping 通的。

Docker在安装成功后,会在宿主机创建一通过docker生成的 0 和 v 两个网卡实现同一网段内的通信,而这个网卡又是桥接在docker0网卡上的。个docker0网卡,这个网卡就是负责容器与宿主机之间通信的桥梁。

通过Docker创建一个容器之后,会在宿主机再创建一个网卡,也就是上面的 v3543ea3@if7 ,容器内也会创建一个网卡。

一般成对的网卡,网卡组件名称后面的数字是连续的,比如宿主机的 @if7 和容器内的 @if8 ,正是这成对的网卡,才实现了容器与宿主机之间的通信。这其实是利用 Linux Kernel 的特性 NameSpace 实现的网卡隔离,不同NameSpace下的网卡是的,就像Ja程序中的 package 一样。

其实这只是单容器的状态,可能看不出docker0的作用。用图来表示一下单容器的网卡通信情况。

再看下有多个容器的情况。

两个容器之间可以互相通信的原因就是因为docker0的存在,因为它们的网卡都是桥接在docker0上,所以也就有了和另一个容器通信的桥。

我们来验证一下是不是这样!

这种网络连接方法我们称为Bridge,这也是docker中默认的网络模式。可以通过命令查看docker中的网络模式:

通过 docker network ls 命令查看到,docker提供了3种网络模式,brige模式我们已经知道了,那 host 和 none 又是什么意思呢?不妨来验证一下:

这种模式只会创建一个本地的环路网卡,无法与其他容器或宿主机进行通信。

在创建自己的network之前先来解释一下为什么要创建新的network。

我们用一个例子来演示一下不同容器之间的通信。

容器之间通过 ip 是可以正常访问的,但是有没有这种情况:如果一个容器出问题了,我们重启之后它的ip变了,那是不是其他用到这个容器的项目配置是不是都得改。

有没有可能直接通过容器名称来访问呢?来验证一下:

发现并不能 ping 通,但是可以使用别的手段来达到这个目的。

通过上面这种方式就可以做到以容器名来 ping 通其他容器,其实它就跟windows系统中在 hosts 文件里加了个映射是一样的。

可以看到创建自定义的 network 自动帮我们实现了这个功能,而且使用自定义的 network 也方便管理,不同业务类型的容器可以指定不同的 network。

不同的 network ip网段也不一样,这样也可以增加单机中可以创建的容器的数量。

在创建一个容器的时候,一般都需要讲容器需要暴露的端口映射到物理主机的相同端口或其他端口,因为在外网环境下是不方便直接连接到容器的,所以需要通过映射端口的方式,让外网访问宿主机的映射端口来访问容器。

如果想建立多个容器,势必需要端口映射,以满足不同容器使用相同端口的情况。

以上这些内容都是在单容器进行作,容器之间通信也只是通过 docker0 实现的桥接模式。

如果要实现多机之间的docker通信,其实还是通过网卡,只不过需要其他的技术来实现了。

本章节就不在演示,到后面的章节再来分析!

Docker-可视化管理工具总结-使用Portainer

Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。

对于初学docker的小白,一款好的可视化工具有助于快速掌握docker基本形态和概念,下面针对docker可视化工具做些总结

UI For Docker是一个使用Docker Remote API 的web接口,目的是提供一个简洁纯净的客户端实现,为了连接和管理Docker; 该工具目前已经无人维护,建议使用下面介绍的portainer

docker run -it -d --name docker-web --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock

Portainer 将管理容器的复杂性隐藏在易于使用的 UI 后面。通过消除使用 CLI、编写 YAML 或理解清单的需要,Portainer 使部署应用程序和解决问题变得如此简单,任何人都可以做到

Portainer 由两个元素组成:Portainer 和 Portainer 。两者都在您现有的容器化基础设施上作为轻量级容器运行。Portainer 应该部署到集群中的每个,并配置为向 Portainer 容器报告。

单个 Portainer 将接受来自任意数量的 Portainer 的连接,从而提供从一个集中式界面管理多个集群的能力。为此,Portainer 容器需要数据持久性。Portainer 是无状态的,数据被传送回 Portainer 容器。

运行下面两条命令即可。这些命令会创建一个Portainer专用的卷,然后在8000和9000端口创建容器并运行。

如果使用Portainer管理本地Docker主机的话,需要绑定/var/run/docker.sock (这里是个知识点,涉及docker 之间通信的问题,以及docker 里运行docker )

docker run --name portainer --restart always -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

然后在浏览器打开对应地址,就会发现成功运行了。次运行的时候需要设置账号,然后选择要管理的Docker主机。

注意:portainer/portainer 是 Portainer v1.24.x 的镜像名,现在已弃用;从 2022 年 1 月开始,Portainer 2.0 的所有新版本都将在 portainer/portainer-ce 中发布

docker run -d -p 9000:9000 --name portainer --restart always -v portainer_data:/data portainer/portainer -H tcp://:

ps:-H 后面的remote是你想用portainert管理的docker

只能在创建 Portainer 容器时添加本地环境。部署 Portainer 后,您无法添加本地环境

次登陆会让选择管理的容器环境,这里可以选择本机 ,通过挂载/var/run/docker.sock 和docker 守护进程通信(如图所示), 关于这部分知识后面会总结分享出来。

之后就可以看到本机上运行的Docker容器了,点击它们还可以进行容器的管理。

左边的条目可以管理卷、创建容器、查看主机信息等等。基本上该有的功能都有了

通过该方式,可以将远程机器添加到Portainer服务端,统一管理远程机器上的容器环境

将 Docker Standalone 主机连接到 Portainer 时,可以使用两种方法。您可以通过 TCP 直接连接到 Docker API,也可以在 Docker Standalone 主机上安装 Portainer 并通过连接。

1) 通过远程访问TCP:2375端口绑定环境

2) 通过Portainer Agent方式管理docker环境

使用Agent需要在要的主机上创建一个portainer agent容器

docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:2.11.1

在k8s集群上执行以下命令

-L -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agen文档里有明确指出, docker start 可以重新启动 ,那它又可以转成 running 状态啦~~t-k8s.yaml

在远程k8s集群上部署agent后,在Portainer server 上通过nodeport 或者 targetport 进行服务配置,完成k8s集群的连接配置。

LazyDocker是基于终端的一个可视化查询工具,支持键盘作和鼠标点击。相比Portainer来说可能不那么专业,不过对于开发者来说可能反而更加好用了。因为一般开发者都是使用命令行来运行Docker,偶尔需要图形化查看的时候,就可以使用LazyDocker这个工具。

Lazydocker 的具体特性如下:

当然如果发现LazyDocker挺好用,准备经常使用的话,还可以把它做成缩写添加到shell配置文件中,这样就可以将它变成一个简单的命令。例如我用的是zsh,就将下面这样添加到.zshrc文件中。以后就可以直接用lzd来调用LazyDocker了。

echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc

然后就可以在终端中查看Docker容器、镜像和卷的信息了。LazyDocker支持键盘作和鼠标点击,直接用鼠标点击就可以查看对应信息了

Docker Desktop 是 Docker 自带的客户端。 ; 如果是windows用户,想在Windows系统上运行docker容器,可以使用;