Docker总结

Docker总结

学习docker首先要学习docker的三大基本概念:仓库,镜像和容器

所谓 仓库就是就类型于maven仓库,git仓库,是专门存放东西的地方,docker中的仓库和maven和git仓库不同,maven仓库主要用来存放依赖架包的,git仓库主要用来存放代码的,而今天讲的docker的仓库主要是用来存放镜像的.

何为镜像?所谓镜像就是一个用来创建容器的工具,一个镜像可以创建多个容器,可以从官网仓库(docker hub)或者其他私服仓库拉取先要的镜像,或者通过dockerfile来构建属于自己的镜像

何为容器?容器是由镜像创建了,他可以被启动,停止,运行,删除,每个容器之间都是互相隔离的,保证安全,也可以把容器当做一个小型虚拟机(或者一个简单的linux环境)

知道了以上的三大概念,那么下面就需要了解如何使用?

首先需要安装Docker

​ 安装比较简单,我们可以基于centos7 (必须3.10以上)进行安装,也可以基于其他版本安装,安装完以后可以使用命令docker version检验docker是否启动成功

其次安装完docker以后就需要创建容器

​ docker run -i -t --name ="自定义的容器的名字" 镜像的名字 /bin/bash

​ -i:默认是false ,允许你对容器内的标椎输入进行交互

​ -t:默认是false,在新容器内指定一个伪终端

​ /bin/bash 表示启动这个容器

​ 使用exit表示退出守护式容器

查看容器:docker ps -a -l

​ -a表示查看多有的容器

​ -l表示查看最近创建的容器

查看容器的详细信息,比如可以看到ip信息 docker inspect 容器的名字

重启已经停止的容器:docker Satart 容器名

删除已停止的容器:docker rm 容器名

什么是守护者容器

大多是容器都是在创建好之后就关闭了.在真实的案例中,我们需要长期运行的容器提供服务.这就是docker的守护式容器.

以守护形式运行容器:docker run -i -t 镜像名 /bin/bash

退出不关闭容器:先ctrl+p,然后ctrl+Q

进入到运行中的容器中:docker attach 容器名

启动守护式容器:docker run --name 容器名字 -d 镜像名 /bin/bash

​ ` -d表示不需要进入文件夹中,就可以启动文件

查看容器日志:docker logs -f -t --tail="all" 容器名

​ -f 默认为false 一致跟踪日志的变化,并返回结果

​ -t默认是false 在返回的结果上加上时间戳

​ --tail="all" 返回最后几行的日志数据

查看容器内的进程 docker top 容器名

在运行的容器中启动新的进程:docker exec -d -i -t 容器名 /bin/bash

停止守护式容器:

​ docker stop 容器名:发送一个信号给容器,等待容器的关闭

​ docker kill 容器名 :直接停止容器

如何使用docker进行部署网站

设置容器的端口映射

​ 创建的容器就类似一个虚拟机,需要暴露接口给外面,因此需要进行容器的端口映射

​ docker run -p 80 -i -t centos /bin/bash

​ docker run -p 8080:80 -i -t centos /bin/bash

​ docker run -p 0.0.0.0:80 -i -t centos /bin/bash

​ docker run -p 0.0.0.0:8080:80 -i -t centos /bin/bash

​ -p 80 :就表示为容器暴露80的端口,任意路径和端口都可以映射80端口

​ -p 8080:80:表示为容器暴露80端口,任意的路径的8080端口才可以映射80端口

​ -p 0.0.0.0:80表示用指定的ip映射80端口,需要用指定的ip才可以访问

如何部署Nginx

1.创建一个容器.并映射容器的80端口

docker run -p 80 --name="容器的名字" -it centos /bin/bash

​ -it :就相当于-i -t

2.执行安装命令:

    yum install -y epel-release
    yum install -y nginx

3.运行nginx的命令.启动nginx服务 /usr/sbin/nginx

4.ctrl+p ctrl +q退出容器

5.在浏览器上进行访问http://虚拟机ip:32769/index.html

如果重启容器后会发现用原来的端口映射已经访问不到了,当重新启动容器会重新给我们进行端口的映射.

Docker的镜像和仓库

查看所有镜像 docker images

查看镜像信息docker inspect 镜像名字或id

删除镜像 docker rmi 镜像名 -f

​ -f 表示强制删除

删除对应仓库中所有镜像 docker rmi $(docker images -q centos)

如何获取和推送镜像

查找镜像有两种方式:1.docker hub 2.docker search 镜像名字 term

拉取镜像:docker pull 镜像名:版本号

拉取速度慢,可以使用镜像加速器进行加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://175i7vum.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

推送镜像: docker push 镜像名(按照阿里云中给出的步骤进行拉取)比如:

    1.注册hub的账号.
    2.登陆hub的账号.docker login
    3.使用push命令推送到hub中

构建镜像

两种方式进行构建

第一种:docker commit 通过容器进行构建(不常用)

第二种:docker build 通过Dockerfile文件构建(比较常用)

第一种方式

使用commit构建镜像

1.创建一个容器并安装nginx服务

2.提交镜像

docker commit -a 'dongdd' -m 'nginx' web01 dong/web01

其中dondd是作者的名字,'nginx'表示提交的信息,web01是基于的容器名字,dong/web01是创建的仓库名或者镜像名字

3.根据刚才创建的镜像创建并启动容器

docker run -d --name nginx_web01 -p 80 dong/web01 /usr/sbin/nginx -g "daemon off;"

其中nginx_web01表示创建的容器的名字,dong/web01表示的自定义的镜像,

将镜像推送到Registry

docker login --username=it_dong registry.cn-hangzhou.aliyuncs.com

docker tag bd4bec9af65d registry.cn-hangzhou.aliyuncs.com/dong_dd/web-nginx:1.0

docker push registry.cn-hangzhou.aliyuncs.com/dong_dd/web-nginx:1.0

拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/dong_dd/web-nginx:[镜像版本号]
第二种方式:
使用dockerFile构建镜像

DockerFile的指令:

使用CMD指令解决默认命令

​ FROM centos
​ MAINTAINER dongdd "[email protected]"
​ RUN yum install -y epel-release
​ RUN yum install -y nginx
​ EXPOSE 80

docker build -t="dong/web01" /root/dockerfile/df1

docker run -d -p 80 dong/web02

所谓dockerfile构建镜像,其实就是要必须有一个Dockerfile 的文件,这个文件中写的一行一行的命令,然后通过docker build xxxx进行构建镜像,然后根据构建好的镜像创建容器的过程

使用Dockerfile文件构建镜像必须要写好Dockerfile文件中的指令:

​ FROM指令:表示是基于哪一个镜像的,必须要写

​ MAINTAINER:表示作者的信息 后面包含作者名和邮箱

​ RUN:表示指定当前镜像中运行的命令,每个RUN命令都会在当前镜像的上层创建一个新的镜像来运行指令.

​ EXPOSE:表示指定运行该镜像的容器使用的端口,

    我们使用EXPOSE只是告诉Docker运行该镜像的容器会使用80端口,出于安全的考虑,docker并不会打开该端口.
而是需要我们在使用该镜像运行容器的时候指定端口的映射.

CMD:表示默认的命令指令,后面添加相应的指令,然后在启动容器的时候可以不用写这些指令了,因为已经默认执行了,但是如果在启动容器的时候运行其他指令,这时候哪个默认指令则会被覆盖

ENTRYPOINT:表示默认的命令指令,和CMD类似,但是这个命令不会被覆盖

ADD:将文件和目录复制到使用dockerfile构建的镜像中

COPY:和ADD类似,比如可以使用copy替换默认首页的情况,只需要在COPY后面添加自己定义的文件路径. 后面在跟上其他文件路径,运行的时候就会执行自定义的路径

ONBUILD:镜像触发器:表示当一个镜像被其他镜像作为基础镜像时执行时,会在构建过程中插入指令,ONBUILD后面跟着的指令只会在当前镜像被作为基础镜像时才会被执行,如果没有作为基础镜像时,是不会执行这条命令的,把这个镜像作为基础镜像构建其他镜像时,就会执行这条指令,也就是说,构建的时候执行这个指令,这样做的好处是如果构建多个镜像都需要同样的指令,可以把这个指令放到基础镜像中,然后大家执行的时候都会执行,这样可以减少重复操作

容器之间的互联

1.需要构建基础镜像

Dockerfile文件配置如下:

FROM 基础镜像名
MAINTAINER 作者名 "邮箱"
RUN yum install -y iputils
RUN yum install -y net-tools
CMD /bin/bash
EXPOSE 80

2.使用docker build构建镜像,然后基于这个镜像创建容器,当基于同一个镜像创建多个容器时会发现他们之间是ping通的(就是可以互联),通过ping 其他容器的ip地址就可以看到了

3.但是会发现当重启容器以后,他们的ip会改变,因此如果两个容器使用ip进行连接,一旦重启以后,可能就连不上了,如何解决呢?

4.在创建容器的时候要加上 --link=要互联的容器名:这个要互联容器的别名 例如:

docker run -it --name=web01 --link=web02:zk dong/web 这样创建的容器之间的连接是通过别名进行连接的,而不是通过ip连接.因此当ip改变了以后,别名还是以前的别名,还是可以进行连接

你可能感兴趣的:(Docker总结)