Docker从入门到精通

1. Docker简介

Docker官方网址: https://docs.docker.com/  英文地址html

Docker中文网址: http://www.docker.org.cn/ 中文地址java

Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotClouw公司。Docker 自开源后受到普遍的关注和讨论,目前已有多个相关项目,逐断造成了围Docker的生态体系。dotCloud 公司后来也更名为Docker Ine。mysql

Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,而且能将基础设施看成程序同样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并能够缩短从编写到部署运行代码的周期。linux

Docker架构nginx

2. Docker安装

要求:Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker web

安装步骤:sql

① 经过 uname -r 命令查看你当前的内核版本docker

uname -r

② 使用 root 权限登陆 Centos。确保 yum 包更新到最新json

yum -y update

③ 卸载旧版本(若是安装过旧版本的话)centos

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

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

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

⑤ 设置yum

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

⑥ 能够查看全部仓库中全部docker版本,并选择特定版本安装

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

⑦ 安装docker

sudo yum install -y docker-ce     #因为repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1

⑧ 启动并加入开机启动

systemctl start docker
systemctl enable docker

⑨ 验证安装是否成功(clientserver两部分表示docker安装启动都成功了)

docker version

3. 配置Docker阿里镜像加速

详细参考: https://cr.console.aliyun.com/cn-hangzhou/mirrors

进入上述网址,键入红框中的命令:

[root@localhost local]# sudo mkdir -p /etc/docker
[root@localhost local]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}

此时cat一下,能够查看到配置的镜像地址

[root@localhost local]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}

最后,键入如下命令,重启Docker便可:

[root@localhost local]# sudo systemctl daemon-reload
[root@localhost local]# sudo systemctl restart docker

4. Docker下载镜像文件

① 搜索镜像

[root@localhost local]# docker search java

可以使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放全部docker镜像软件的地方,相似maven的中央仓库)中的镜像。执行该命令后, Docker就会在Docker Hub中搜索含有 java这个关键词的镜像仓库。

② 下载镜像(这里如下载java8为例)

[root@localhost local]# docker pull java:8

使用命令docker pull命令便可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最新版本的 Java镜像。若是要下载指定版本则在java后面加冒号指定版本。

③ 列出本地镜像(已下载的镜像)

[root@localhost local]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
java                8                   d23bdf5b1b1b        23 months ago       643MB

能够看到,刚才下载的java8已经在本地镜像列表中

5. Docker安装Nginx服务器

① 安装

[root@localhost local]# docker run -d -p 81:80 nginx  //不指定端口号默认以最新的进行下载

参数说明

-d 后台运行

-p 宿主机端口:容器端口     #开放容器端口到宿主机端口

浏览器访问http://Docker宿主机IP:81,便可访问成功:

② docker run 和 docker pull 的区别

docker run 会检测在本地images仓库有没有镜像文件,若是没有,就会去远程仓库下载,放到images,同时会建立一个容器运行,但必须指定端口号(通常docker run用的比较多)
docker pull只会下载镜像文件放到images里面去

③ docker ps 命令  --> 列出正在运行的容器

[root@localhost local]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
7f0b6cd60181        nginx               "nginx -g 'daemon of…"   14 minutes ago      Up 14 minutes       0.0.0.0:81->80/tcp   compassionate_northcutt

④ docker inspect containerid 命令  -->查看容器的信息

[root@localhost local]#  docker inspect  7f0b6cd60181

能够看到如下信息:

此时经过curl命令能够访问到,而浏览器则访问不到。:

[root@localhost ~]# curl 172.17.0.2:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

⑤ 其余命令

systemctl restart docker  重启docker

systemctl stop firewalld   关闭防火墙

6. Docker配置Nginx负载均衡

经过Docker安装的Nginx如何配置nginx.conf?

Docker经过容器运行Nginx-----安装的目录 在容器中

/容器id/etc/nginx

/容器id/etc/mysql

默认状况下安装在 容器的etc目录

Docker 安装的软件如何修改配置文件的?

答案:容器挂载外部配置文件 –v(使用挂载方式,外部的配置文件覆盖内部容器配置文件)

详细步骤:

① 建立挂载目录

# mkdir -p /data/nginx/{conf,conf.d,html,logs}

上传配置好的nginx.conf配置文件到/data/nginx/conf目录下

② 中止/删除正在运行的docker的nginx容器:

docker stop 容器名(names属性)

docker rm 容器id(container_id属性)

③ 启动容器

其中第一个红色为宿主机的nginx配置文件绝对路径

第二个红色为nignx的docker容器的nginx配置文件的绝对路径

docker run --name mynginx -d -p 80:80  -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v  /data/nginx/logs:/var/log/nginx -d docker.io/nginx

④ 进入nginx的docker容器(重点)

docker container exec -it f0b1c8ab3633 /bin/bash

备注:f0b1c8ab3633指的是docker ps查出来的nginx的容器id(container id属性)

能够发现,命令行的前缀变为了 root@4938c1288b47:/# 

nginx在docker容器的配置文件默认配置在虚拟容器的/etc/nginx目录下

⑤ 拓展

容器:即虚拟操做系统

宿主机的命令行:[root@localhost local]# 

docker容器的命令行:root@4938c1288b47:/# 

进入容器后,该docker是很是轻量的,默认没有vi插件,但也没必要装,不建议直接在容器中更改配置文件等信息,因此采用挂载的方式进行容宿主机的配置文件和容器内的配置文件进行同步。

7. Docker经常使用命令

docker images  查看本地镜像文件

docker ps  查看正在运行的容器

docker ps –a  查看全部的容器

docker container exec -it container_id /bin/bash  进入到容器

exit  退出(docker容器中的命令,键入此命令,退回宿主机命令行)

docker version  查看版本

docker run -d -p 80:80 nginx  启动nginx容器

docker rmi imgage_id  删除镜像(docker imges查出来的结果)

docker rm 容器id  删除容器

docker stop 容器name  中止容器