CentOS 7 安装docker & 使用教程
CentOS 7 安装docker & 使用教程
Docker 安装
前提
-
查看内核版本(>3.10.0)
-
curl命令
-
执行安装命令 curl -sSL https://get.docker.com | sh 需要FQ
如果没有梯子的朋友,可以去 https://www.daocloud.io/ 上使用docker加速器安装
命令相关
查看内核版本:
$ uname -r
确认有没有curl命令:
$ which curl
如果没有安装curl:
$ yum install -y curl
执行安装 docker 脚本,默认下载一下docker的软件包:
$ curl -sSL https://get.docker.com | sh
查看版本:
$ docker -v
启动docker:
centos7:
$ systemctl start docker
centos6:
$ service docker start
设置开机自启动:
$ systemctl enable docker
确认 docker 是否已经启动:
$ ps -aux | grep docker
Docker镜像分层技术
什么是 docker 镜像?
就是把业务代码和运行环境进行整体打包。
如何创建 docker镜像?
镜像是由多个layer组合而成,并且是只读的。
如何想要写入数据该什么办呢?我们会在镜像上起一层layer,其实就是把镜像启动成一个容器进行写操作!
例如在 ubuntu 加一层 nginx
推荐使用 dockerfile 创建镜像
避免使用 commit 创建镜像(不推荐, 容器必定是容器,容器不是虚拟机。)
Docker镜像下载
-
Docker官方镜像中心(hub.docker.com)
-
本地镜像
查看本地镜像
$ docker images
本地镜像介绍:
-
从中心镜像仓库下载到宿主机本地
-
如果第一次下载镜像,就会把镜像所有层都下载下来
-
利用镜像分层技术,如果主机上已有的layer(层)存在(可以理解成父镜像),只下载新增加的layer(层)(可以理解成子镜像),类似git代码提交机制。
下载镜像到本地
docker官方镜像下载不需要认证,上传镜像是需要认证的。
命令:
$ docker pull <镜像名称>
如何把本地镜像上传,或者分析给其他人:
查看本地所有镜像命令:
$ docker images -a
查看 docker 所有的操作命令:
$ docker -h
搜索docker镜像命令:
$ docker search <image:tag>
Docker删除镜像
什么情况下不可删除镜像?
1、有容器使用镜像被创建 可以通过docker ps -a 命令查看当前本地主机哪些容器在运行
2、镜像是其他镜像的父镜像
删除本地镜像命令:
$ docker rmi <镜像名称>
Docker上传镜像
上传镜像到共有镜像仓库
-
docker hub 账号
-
docker login
-
docker push
登录docker hub
$ docker login
推送
$ docker push <镜像名称>
docker容器
-
容器是什么
-
创建容器
-
容器的操作命令
-
容器与镜像之间的关系
docker 与 虚拟机不一样
虚拟机是服务器硬件和操作系统的解耦,容器本身是进程。
Docker优点
-
更轻量,镜像尺寸小,资源利用率高
-
更快速,直接运行在宿主机上,没有IO转换负担
-
更便捷,易安装,易使用,迁移方便,数据量小
Docker创建容器
命令
$ docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry:/var/lib/registry registry:2
$ docker run -d -it -p 80:80 --name=centos6.6 -v /opt/:/opt/ centos:6.6 /bin/bash
更改镜像名称
$ docker tag nginx:1.11.1 new/nginx:1.11.1
上传镜像
-
修改docker daemon启动参数 --insecure-registry=0.0.0.0/0
-
docker push new/nginx:1.11.1
命令
$ vim /usr/lib/systemd/system/docker.service
从新启动docker daemon
$ systemctl daemon-reload
$ systemctl restart docker
查看启动情况
$ ps -aux | grep docker
执行上传
$ docker push new/nginx:1.11.1
下载镜像
$ docker pull new/nginx:1.11.1
Docker容器的操作命令
-
run/create 运行/创建一个容器
-
start 启动一个容器
-
stop/kill 停止/杀死一个容器
-
restart 重启一个容器
-
pause 暂停一个容器
-
unpause 取消暂停一个容器
-
logs 查看容器日志
-
stats 查看容器监控资源信息(cpu 内容 网络流量)
-
top [容器名称] 查看容器运行多少进程
-
port [容器名称] 容器和本地主机映射的端口信息
-
exec/attach docker exec -it [容器名称] bash 启动一个伪终端,登录到容器中。exit退出
-
diff [容器名称] 查看容器中文件哪些是一样的或者不一样的
-
inspect 查看容器/镜像详细信息 $ docker inspect app | grep -i memory 查看容器分配磁盘空间大小
-
update 更新容器信息 $ docker update -m 256m app 更新容器磁盘空间 $docker update -h 查看帮助
-
cp 拷贝文件 $ docker cp app:/usr/share/nginx/html/index.html ./
-
export 把容器保存成 tar 文件(用的不多)
-
import 把 tar 文件导入到镜像列表(用的不多)
-
rm 删除容器 -f 强制删除
docker容器和镜像的关系
容器公用一个镜像,可以起好多个容器
实现的机制
docker数据保存
把数据挂载到宿主机目录下,以保留数据。
Docker数据管理
镜像是怎么来的呢?是由dockerfile bulid 出来的
创建一个dockerfile:
FROM centos:7 RUN yum -y install epel-replease && \ yum -y install nginx && \ yum clean all EXPOE 80 443 CMD ["nginx" , "-g" , "deamun off;"]
$ docker build -t app .
删除容器:
$ docker rm <container_id>
$ docker rm -v <container_id> // 连volume文件一起删除
查看容器匹配的volume文件有哪些
$ docker inspect
Docker 实战网络模式
以 nat network(默认模式) 运行容器,实现从外网访问容器内的服务:
$ docker run -d -p 80:80 --name app nginx:1.11.1
$ ps -aux | grep docker
以 host network 运行容器:
$ docker run -d --name app2 --net=host nginx:1.11.1
容器与容器之间通讯比较平凡,可以使用 container network 模式。
Docker voerlay 网络模式
修改 docker 启动参数:
$ vim /usr/lib/systemd/system/docker.service
两台机器都需要修改 docker 启动配置文件:
重启 docker 服务:
$ systemctl daemon -reload $ systemctl restart docker $ ps -aux | grep docker //查看是否重启成功
第一台主机启动 consul :
$ docker pull progrium/consul //拉取consul $ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul progrium/consul -server-bootstrap -ui-dir /ui
打开浏览器访问控制台 192.168.59.100:8500
实践 overlay network
查看 docker 当前都有哪些网络:
$ docker network ls
创建 overlay :
登录进去:
$ docker exec -it app1 bash //查看ip addr