系统要求DockerCE支持64位版本CentOS7,并且要求内核版本不低于3.10。CentOS7满足最低内核的要求,但由于内核版本比较低,部分功能(如overlay2存储层驱动)无法使用,并且部分功能可能不太稳定。卸载旧版本旧版本的Docker称...
系统要求
Docker CE支持64位版本CentOS7,并且要求内核版本不低于3.10。CentOS7满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2存储层驱动)无法使用,并且部分功能可能不太稳定。
卸载旧版本
旧版本的Docker称为docker或者docker-engine,使用以下命令卸载旧版本:
$sudoyumremovedocker\
docker-client\
docker-client-latest\
docker-common\
docker-latest\
docker-latest-logrotate\
docker-logrotate\
docker-selinux\
docker-engine-selinux\
docker-engine
使用yum安装
执行以下命令安装依赖包:
$sudo yuminstall -yyum-utils device-mapper-persistent-datalvm2
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
执行下面的命令添加 yum 软件源:
CentOS
$ sudo yum-config-manager--add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# $ sudoyum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo
如果需要最新版本的DockerCE请使用以下命令:
$sudo yum-config-manager--enabledocker-ce-edge
如果需要测试版本的Docker CE 请使用以下命令:
$ sudo yum-config-manager --enable docker-ce-test
安装 Docker CE
更新 yum 软件源缓存,并安装 docker-ce 。
$sudo yum makecache fast
$sudo yum install docker-ce
使用脚本自动安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS
系统上可以使用这套脚本安装:
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。
启动 Docker CE
$sudo systemctl enable docker
$sudo systemctl start docker
建立 docker 用户组
默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用docker 的用户加入 docker用户组。
建立docker 组:
$ sudo groupadd docker
将当前用户加入docker 组:
$ sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
测试 Docker 是否安装正确
$docker run hello-world
添加内核参数
默认配置下,如果在CentOS使用DockerCE看到下面的这些警告信息:
WARNING:bridge-nf-call-iptablesisdisabled
WARNING:bridge-nf-call-ip6tablesisdisabled
请添加内核配置参数以启用这些功能。
$sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables= 1
EOF
然后重新加载 sysctl.conf 即可
$sudo sysctl -p
对于使用systemd的系统,请在 /etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors":[
"https://registry.docker-cn.com"
]
}
注意,一定要保证该文件符合json规范,否则Docker将不能启动。
之后重新启动服务。
$sudo systemctl daemon-reload
$sudo systemctl restartdocker
检查加速器是否生效
配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行
$dockerinfo
如果从结果中看到了如下内容,说明配置成功。
RegistryMirrors:
https://registry.docker-cn.com/
获取ubuntu:16.04镜像
$docker pull ubuntu:16.04
$dockerrun-it--rm ubuntu:16.04bash //运行ubuntu16.04 的bash控制台,使用--rm参数表示退出容器后删除容器
简要的说明一下上面用到的参数。
-it:这是两个参数,一个是 -i:交互式操作,一个是-t终端。我们这里打算进入
bash执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm可以避免浪费空间。
ubuntu:16.04:这是指用 ubuntu:16.04镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是 bash。
进入容器后,我们可以在Shell下操作,执行任何所需的命令。这里,我们执行了
cat /etc/os-release,这是Linux常用的查看当前系统版本的命令,从返回的结果可以看到容器内是Ubuntu 16.04.4LTS 系统。
最后我们通过 exit退出了这个容器。
要想列出已经下载下来的镜像,可以使用
$docker image ls
$docker system df //查看镜像容器占用空间
为了加速镜像构建、重复利用资源,Docker会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的$docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a参数。
$docker image ls -a
$docker image ls ubuntu //按仓库名列出镜像
$docker image ls ubuntu:16.04 //指定仓库和标签列出镜像
$docker image ls -f since=mongo:3.2 //在mongo:3.2之后建立的镜像 since换成为before则是在之前建立的镜像。
$docker image ls -q 列出ID列表
$docker image ls --format "{{.ID}}: {{.repository}}" //按id和仓库名格式输出列表
$docker image ls --format "table {{.ID}}:\t{{.repository}}\t{{.Tag}}" //用表格等距格式输入列表
删除本地镜像
$docker image rm {镜像短ID,长ID,镜像名,镜像摘要} //短id在长id基础上取得前3个字符以上
$docker image rm centos //按镜像名删除
与docker image ls 配合删除镜像
$docker image rm $(docker image ls -q redis) //删除所有仓库名为redis的镜像
$docker image rm $(docker image ls -q -f before=mongo:3.2)
定制nginx网页服务镜像
$docker run --name webserver -d -p 80:80 nginx
$docker exec -it webserver bash //切入该镜像bash命令行
镜像提交时修改作者和仓库标签为v2
$docker commit --author "作者" --message "注释" webserver nginx:v2
查看镜像内的历史记录
$docker history nginx:v2
运行新的镜像
$docker run --name web2 -d -p 81:80 nginx:v2
使用dockerfile来定制镜像
$mkdir nginx
$cd nginx
$vi Dockerfile
From nginx
RUN echo 'hello docker!' >/usr/share/nginx/html/index.html
然后在dockerfile所在目录执行
$docker build -t nginx:v3
在本例中 可书写为以下方式,这样只需要构建一层容器,节省空间
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
全文详见:http://xpxw.com/?id=55