关于docker

声明下都是怎么称呼docker的:

    RHEL/CentOS 软件源中的 Docker 包名为 docker

    Ubuntu 软件源中的 Docker 包名为 docker.io

    而很古老的 Docker 源中 Docker 也曾叫做 lxc-docker。这些都是非常老旧的 Docker 版本,并且基本不会更新到最新的版本,而对于使用 Docker 而言,使用最新版本非常重要。

    另外,17.04 以后,包名从 docker-engine 改为 docker-ce,因此从现在开始安装,应该都使用 docker-ce 这个包

本地运行 Docker 官方文档的网站,以docker 的方式:

$ docker run -d -p 80:4000 docs/docker.github.io

访问 Docker 宿主的 80 端口,如 http://localhost,就会看到官网文档

或者

$ docker run -d -p 80:80 twang2218/blog.lab99.org

[[email protected] ~]# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 
[[email protected] ~]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

安装docker-ce的2种方法:

1、yum安装docker-ce

首先安装所需的软件包:

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

命令设置 stable 镜像仓库,始终需要使用 stable 镜像仓库,即使还需要通过 edge 或 testing 镜像仓库安装构建也是如此。

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

//此时会在/etc/yum.repos.d/目录中多个docker-ce.repo的源

启用edge和testing镜像仓库

这些镜像仓库包含在docker.repo 文件中(/etc/yum.repos.d/),但默认情况下处于禁用状态,将它们和stable 镜像仓库一起启用。

$ yum-config-manager --enable docker-ce-edge          //关闭是 disabled

$ yum-config-manager --enable docker-ce-testing       //关闭是 disabled

$ yum makecache fast           //更新 yum 软件包索引

$ yum -y install docker-ce     //默认安装最新的版本

在生产系统中,应该安装特定版本的 Docker CE,而不是始终使用最新版本。

列出可用版本。此示例使用 sort -r 命令按版本号(从最高到最低)对结果进行排序,并且已被截断。

注:此 yum list 命令仅显示二进制软件包。如果还需要显示 源软件包,请从软件包名称中省略 .x86_64。

$ yum list docker-ce.x86_64  --showduplicates | sort -r

docker-ce.x86_64            17.07.0.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable

docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable

docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable

docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.05.0.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.04.0.ce-1.el7.centos             docker-ce-edge

docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable

docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable

docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable

//此列表的内容取决于启用了哪些镜像仓库,并且将特定于你的 CentOS 版本(.el7 后缀表示版本)。

选择一个特定版本进行安装。

第二列为版本字符串。

第三列为镜像仓库名称,它表示软件包来自哪个镜像仓库并按扩展其稳定性级别列出。

如需安装特定版本,就将版本字符串附加到软件包名称,并使用连字符 (-) 分隔它们:

格式:yum -y install docker-ce-<VERSION>

例:yum install docker-ce-17.07.0.ce-1.el7.centos

$ systemctl start docker          //启动 Docker

$ docker run hello-world          //验证是否正确安装了docker

升级 DOCKER-CE

运行 sudo yum makecache fast,返回到上面即可接着执行即可

2、通过脚本安装docker-ce

使用DaoCloud的Docker安装脚本:

curl -sSL https://get.daocloud.io/docker | sh

17.03及以前的版本使用阿里云的安装脚本:

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

17.04 及以后的版本:

export CHANNEL=stable //环境变量指定安装通道为 stable

curl -fsSL https://test.docker.com/ | sh -s -- --mirror Aliyun //指定使用阿里云的源(apt/yum)

CentOS 7 配置docker加速器(或其它使用 Systemd 的系统)

$ systemctl enable docker

$ vi /usr/lib/systemd/system/docker.service

保存退出后,重新加载配置并启动服务:

$ systemctl daemon-reload

$ systemctl restart docker

确认一下配置是否已经生效:

$ ps -ef | grep dockerd

如果配置成功,生效后就会在这里看到自己所配置的加速器。

在 1.13 版本以后,可以直接 docker info 查看,如果配置成功,加速器 Registry Mirror 会在最下面列出来。

如果重启后发现无法启动 docker 服务,检查一下服务日志,看看是不是之前执行过那些加速器网站的脚本,如果有做过类似的事情,检查一下是不是被建立了 /etc/docker/daemon.json 以配置加速器,如果是的话,删掉这个文件,然后在重启服务。

使用配置文件是件好事,比如修改配置不必重启服务,只需发送 SIGHUP 信号即可。但需要注意,目前在 dockerd 中使用配置文件时,无法输出当前生效配置,并且当 dockerd 的参数和 daemon.json 文件中的配置有所重复时,并不是一个优先级覆盖另一个,而是会直接导致引擎启动失败.

很多人发现配了加速器后 Docker 启动不起来了就是这个原因。解决办法很简单,去掉重复项。不过在这些问题解决前,建议使用修改docker.service 这类做法来实现配置,而不是使用配置文件 daemon.json。方便 ps -ef | grep dockerd 一眼看到实际配置情况。

固定容器 IP 地址:

一般情况是不需要指定容器 IP 地址的。这不是虚拟主机,而是容器。其地址是供容器间通讯的,容器间则不用 IP 直接通讯,而使用容器名、服务名、网络别名。

为了保持向后兼容,docker run 在不指定 --network 时,所在的网络是 default bridge,在这个网络下,需要使用 --link 参数才可以让两个容器找到对方。

这是有局限性的,因为这个时候使用的是 /etc/hosts 静态文件来进行的解析,比如一个主机挂了后,重新启动IP可能会改变。

虽然说这种改变Docker是可能更新/etc/hosts文件,但是这有诸多问题,可能会因为竞争冒险导致 /etc/hosts 文件损毁,也可能还在运行的容器在取得 /etc/hosts 的解析结果后,不再去监视该文件是否变动。种种原因都可能会导致旧的主机无法通过容器名访问到新的主机。

使用网络端口映射连接:

docker pull centos //比如先pull一个centos来具体说明

docker images                  //查看镜像

docker run -itd -p 3300:80 centos      //将container的80端口映射到本机的3300端口

docker ps                     //-p标志将容器的端口绑定到特定端口。这里主机3300端口映射到container的80端口

CONTAINER ID    IMAGE       COMMAND         CREATED         STATUS          PORTS                   NAMES

6a067f52adf1    centos     "/bin/bash"     3 seconds ago    Up 2 seconds   0.0.0.0:3300->80/tcp    mystifying_lamarr

注:docker run -itd -p 8000-9000:5000 centos 是将container中的5000端口绑定到主机删的8000-9000之间的随机可用端口

docker run -itd -p 127.0.0.1:80:5000 centos  是将5000端口绑定到主机上的localhost或127.0.0.1接口上的80端口

docker run -d -p 127.0.0.1:80:5000/udp centos 是绑定UDP端口

查看docer port快捷的方法:

docker port mystifying_lamarr      //mystifying_lamarr是运行中image的names

80/tcp -> 0.0.0.0:3300                 //显示的结果

//-p可以多次使用该标志来配置多个端口。

系统方面命令:

$ docker search <images_name>   //搜索可用docker镜像

例:docker pull CentOS         //从docker hub上拉取一个centos镜像

$ docker images              //列出images

$ docker images -a             //列出所有的images(包含历史)

$ docker images --tree            //显示镜像的所有层(layer)

$ docker rmi  <image ID>           //删除一个或多个image,逗号隔开

$ docker info  //查看系统(docker)层面信息,包括管理的images, containers数等

$ docker ps -a -q                //查看正在运行的镜像

$ docker rm `docker ps -a -q`     //删除所有的容器

$ docker run -it centos /bin/bash      //前台运行centos镜像,这里能看到镜像的ID,这个很重要,exit后centos将随着关闭  或者  启动一个container并进入交互模式

或者

$ docker start -it <容器ID>             // -i开启输入终端,-t表示使用终端

或者:

$ docker run -itd centos /bin/bash              //-d后台运行centos

$ docker start|stop|restart <容器ID>                            //启动、停止、重启容器

$ docker attach <容器ID>                  //连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例)

$ docker run -it -p <host_port:contain_port> <container>   //映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

网络方面命令:

$ docker network ls                             //查看所有网络容器

$ brctl show        //查看主机网桥信息,如果提示没有此命令请安装yum install bridge-utils

$ [email protected]:/# ip ro li               //在容器中查看路由表

$ docker network inspect bridge              //检查docker桥接网络信息

$ docker network disconnect bridge networktest //可以通过提供网络名称和容器名称或使用容器ID断开容器来从网络中移除容器。

注:所谓的网络bridge是一个特殊的网络。除非你另有“说明”,否则Docker会始终加入到此网络中启动你的容器。

运行以下两个命令启动两个busybox容器,来解释每个容器都连接到默认bridge网络

$ docker run -itd --name=container001 busybox

$ docker run -itd --name=container002 busybox

$ docker network inspect bridge      //查看bridge网络的细节

连接到默认bridge网络的容器可以通过IP地址进行通信。Docker不支持在默认网桥上自动发现服务。

如果你希望容器能够通过容器名称解析的IP地址,应该使用用户定义的网络代替。可以使用legacy docker run --link选项将两个容器链接在一起,但在大多数情况下不推荐使用。

可以attach运行,container以查看网络从容器内部的外观。因为你连接的为root,因此命令提示符是一个#字符

$ docker attach container001 
 / # ifconfig

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00

inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:

UP BROADCAST RUNNING MULTICAST  MTU:1500

RX packets:8 errors:0 dropped:0 overruns:0

TX packets:0 errors:0 dropped:0 overruns:0

collisions:0 txqueuelen:0

RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

UP LOOPBACK RUNNING  MTU:65536  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0

TX packets:0 errors:0 dropped:0 overruns:0

collisions:0 txqueuelen:1

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ #

$ docker attach container002

/ # ifconfig

eth0      Link encap:Ethernet  HWaddr 02:42

inet addr:172.17.0.4  Bcast:0.0.0

UP BROADCAST RUNNING MULTICAST  M

RX packets:8 errors:0 dropped:0 o

TX packets:0 errors:0 dropped:0 o

collisions:0 txqueuelen:0

RX bytes:648 (648.0 B)  TX bytes:

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0

UP LOOPBACK RUNNING  MTU:65536  M

RX packets:0 errors:0 dropped:0 o

TX packets:0 errors:0 dropped:0 o

collisions:0 txqueuelen:1

RX bytes:0 (0.0 B)  TX bytes:0 (0

/ #

待续未完......

时间: 2024-10-06 06:22:02

关于docker的相关文章

Docker学习笔记——Mongo Dockerfile及容器运行

1.创建项目目录mongo,在目录下上传下载的Mongodb安装文件及mongo.conf配置文件,创建Dockerfile文件,项目结构如下: mongo - Dockerfile - mongo.conf - mongodb-linux-x86_64-3.4.9.tgz - data - logs Dockerfile内容如下: # mongo # SOURCE_IMAGE FROM centos # MAINTAINER_INFO MAINTAINER bluemooder [email 

docker深入2-API示例

2017/9/18 一.目的 演示 http API 使用的方式 注1:本次实例是在 docker swarm mode 下使用的,目的是:更新指定服务的镜像. 注2:要在 swarm manager node 上执行. docker 的 API 文档是自动生成的,没有太多有用的示例可用. [版本] ~]# docker version Client:  Version:      17.06.0-ce  API version:  1.30  Go version:   go1.8.3  Gi

docker私有仓库删除image

docker仓库存放着公司内部的镜像.时间长了难免存在一些废弃的镜像在里面.如果不删除造成空间的浪费.下面就简单的看看仓库中的镜像是怎么删除的. 第一步:registry启动依赖config.yml配置文件:在默认文件的storage区域中添加delete_enable_ture配置项.也可以在启动时候指定-e添加.允许删除镜像: 配置文件: 第二步:下载registry镜像并启动容器. docker run  -d -v /conf/:/etc/docker/registry -v /opt/

docker run常用命令及 解决 ubuntu镜像无法识别 ifconfig ping 命令

docker run -it     docker 前端启动 container容器           -d             后端启动 container容器           -p             固定端口映射            -P             不固定端口映射           --name         给生成的容器起名字docker ps:默认显示正在运行的container       ps -a 显示所有的container容器docker r

原创:Docker在云家政的应用 谢绝复制粘贴内容

我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,但是为了解决一些问题,我们引入了现在比较火的Docker技术. 看一下我们在没用Docker之前遇到的问题: 1.线上环境和测试环境不完全一致,导致测试好的功能上线后会出现一些BUG. 2.部署新项目步骤繁琐,批量部署运行环境后,需要根据每个项目不同的情况,手动修改配置参数. 3.新项目

win7 系统安装 docker

如果顺利的话,步骤如下: 1.下载DockerToolbox 2.安装DockerToolbox,默认配置,一路下一步即可完成安装 3.安装成功后,桌面会新增三个快捷方式,如下图 4.点击运行Docker Quickstart Terminal,会从github加载boot2docker.iso,加载完成后会自动在Oracle VM VirtualBox中创建一个Linux的虚拟环境 5.显示如下图表示安装成功 6.执行 docker run hello-world再次验证一下 如果遇到问题,可

【Docker常见问题1】&#8203;下载docker镜像,如何下载指定的应用版本?

举例:如何下载postgres版本9.2? 步骤1:访问官网 https://hub.docker.com/ 步骤2:搜索postgres镜像 搜索框,输入postgres进行搜索 步骤3:查看已发布的版本 点击进入postgres页面,并点击tags,可看到已发布的版本 步骤4:选择一个版本下载 下载版本9.2 sudo docker pull postgres:9.2 或下载最新版本 sudo docker pull postgres:latest

【Docker常见问题2】如何设置容器日志大小和保留个数

举例:当tomcat容器的运行,容器占用空间越来越大,约1个月就会超过2G,如何解决? 步骤1:查看容器日志大小:假设容器目录为/var/lib/docker/containers,那么执行如下命令 cd /var/lib/docker/containers  #进入默认容器空间目录 du -sh *            #统计文件大小2.4G  de92a5643f7ffb106f8abba21fc0f93996842917a52879153adc95a73312934a-json.log

Docker的概念及剖析原理和特点

一.docker的简介: 应用容器是个啥样子呢,一个做好的应用容器长的就像一个装好了一组特定应用的虚拟机一样,比如我现在想用mysql数据库,我直接找个装好了的MySQL的容器就可以了,想用的时候一运行容器,MySQL服务就起来了,就可以使用MySQL了 为什么不能直接安装一个MySQL?或者是SqlServer呢也可以啊? 答:因为有的时候根据每个人的电脑的不同,在物理机安装的时候会出现各种各样的错误,突然你的机器中病毒了或者是挂了,你所有的服务都需要重新安装. 注意:    但是有了dock

docker的存储结构,和以前有了很大不同

在网上学习这一块知识点时,有一个URL讲得很详细, docker 镜像与容器存储目录结构精讲 http://blog.csdn.net/wanglei_storage/article/details/50299491 但我在最新版的docker作验证时,发现早已物是人非,等以后用得着时,再仔细研究吧. 我作的截图如下: overlay里作image相关的存储, 而container目录里作run起来的docker容器的相关存储, 且两者之间,有uuid作对应. 在下图中已标明.