CentOS7安装Docker

一、Docker简介

          Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1、Docker有以下几个部分组成:

  • dockerClient客户端

  • Docker Daemon守护进程

  • Docker Image镜像

  • DockerContainer容器 

2、特性

docker的典型场景:

  • Automating the packaging and deployment of applications(使应用的打包与部署自动化)

  • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)

  • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)

  • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。

3、局限

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

  • Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用

  • LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的

  • 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库

  • 网络管理相对简单,主要是基于namespace隔离

  • cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)

  • Docker对disk的管理比较有限

  • container随着用户进程的停止而销毁,container中的log等用户数据不便收集

二、安装Docker

1、通过 uname -r 命令查看你当前的内核版本

uname -r

2、使用 root 权限登录 Centos,更新yum包到最新

sudo yum update

如果安装过旧版本的话,需要卸载旧版本

sudo yum remove docker  docker-common docker-selinux docker-engine

3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖

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

4、设置yum源

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

 推荐使用阿里云安装:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

6、安装docker

sudo yum install docker-ce-18.03.1.ce 

7、启动并加入开机启动

sudo systemctl start docker
sudo systemctl enable docker

8、验证安装是否成功

docker version

有client和service两部分表示docker安装启动都成功了

8、测试运行 hello-world

9、Docker 客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

 例如我们要查看 docker stats 指令的具体使用方法:

docker stats --help

10、运行一个web应用

在docker容器中运行一个 Python Flask 应用来运行一个web应用。

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py

使用 docker ps 来查看我们正在运行的容器:

docker ps

这里多了端口信息。

0.0.0.0:32768->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。

这时可以通过浏览器访问WEB应用:

可以通过 -p 参数来设置不一样的端口:

docker run -d -p 5000:5000 training/webapp python app.py

查看 WEB 应用程序日志

docker logs -f 4d1aa7d8ebd9  #docker logs [ID或者名字] 可以查看容器内部的标准输出。

注意:-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

使用 docker top 来查看容器内部运行的进程

docker logs 4d1aa7d8ebd9

停止 WEB 应用容器:

docker stop 4d1aa7d8ebd9

已经停止的容器,可以使用命令 docker start 来启动:

docker start 4d1aa7d8ebd9

查询最后一次创建的容器:

docker ps -l 

正在运行的容器,可以使用 docker restart 命令来重启:

docker restart 4d1aa7d8ebd9

可以使用 docker rm 命令来删除不需要的容器:

docker rm 4d1aa7d8ebd9

注意:删除容器时,容器必须是停止状态,否则会报如下错误:

Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove

三、配置docker镜像加速器

1、创建目录

mkdir -p /etc/docker

2、创建daemon.json文件

vim /etc/docker/daemon.json

daemon.json

#网易云
{"registry-mirrors":["http://hub-mirror.c.163.com"]}

#阿里云
{"registry-mirrors":["https://xxx.mirror.aliyuncs.com"]}
systemctl daemon-reload
systemctl restart docker

四、Docker 镜像 

          当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

1、列出镜像列表

[root@localhost ~]# docker images

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

因为我的是刚装的,只运行了一个helloworld和测试web应用时装的两个镜像。

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

2、查找镜像

      可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

      也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。可以通过 docker search 命令搜索 MySQL来寻找适合我们的镜像。

docker search MySQL

 

参数说明:

  • NAME:镜像仓库源的名称
  • DESCRIPTION:镜像的描述
  • OFFICIAL:是否docker官方发布

3、拖取镜像

docker pull mysql

下载完成后,就可以使用这个镜像了。

4、启动镜像

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
  • —name 为设置容器的名字,我设置为mysql

  • -p 端口映射

  • -e 为设置执行时的环境变量,在这里我设置mysql的root密码,相关变量可参考官网

  • -d 为设置镜像,镜像名:版本

5、 查看Docker当前运行

docker ps

6、停止Docker容器

docker stop ID

 7、删除镜像

docker rmi ID

 在镜像未停止的情况下,可以使用 -f 是强制删除,但是这样不友好。

docker rmi -f ID

报错:Error response from daemon: conflict: unable to delete 3ee5e1ce00fc (cannot be forced) - image has dependent child images 

解决方法:找到你要删除的那个TAG,然后通过docker rmi [repository]:[tag]来删除,例如:

docker rmi docker-demo:1.0.0

8、Docker命令小结

命令用途
docker pull获取image
docker build创建image
docker images列出image
docker run运行container
docker ps列出container
docker rm删除container
docker rmi删除image
docker cp在host和container之间拷贝文件
docker commit保存改动为新的image

9、导入导出镜像

导出:

sudo docker save -o docker-demo.tar docker-demo

导入:

docker load -i docker-demo.tar

五、DockerFile创建镜像

1、创建文件Dockerfile文件,该文件名不可更改

vi Dockerfile

编写文本,并保存退出:

FROM alpine:latest
MAINTAINER smilevt
CMD echo "Hello Docker!

docker build命令用于使用 Dockerfile 创建镜像,

docker build -t hello_docker .
  • -t :镜像的名字及标签,通常 name:tag 或者 name
  • path : 点代表当前路径下的所有文件。

2、镜像分层

Dockerfile的每一行都会产生一个新层(新ID),比如:

已经存在image里面的层是只读的,一旦镜像运行为容器之后,就会产生一个新层(RW读写),分层的好处就是多个image可以共享相同的层,减少存储大小。

3、Dockerfile命令小结

命令用途
FROMbase image
RUN执行命令
ADD添加文件
COPY拷贝文件
CMD执行文件
EXPOSE暴露端口
WORKDIR指定路径
MAINTAINER维护者
ENV设定环境
ENTRYPOINT容器入口
USER指定用户
VOLUMEmount point

六、卸载Docker

 

1、查询安装过的包

yum list installed | grep docker

2、删除安装的软件包

systemctl stop docker
yum -y remove docker-engine.x86_64

3、删除镜像/容器

rm -rf /var/lib/docker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值