Docker

Docker是什么?

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

为什么要使用 Docker?

1.更高效的利用系统资源

容器不需要进行硬件虚拟以及运行完整操作系统等额外开销.

2.更快速的启动时间

容器直接运行与宿主内核.

3.一致的运行环境

Docker的镜像提供了除内核外完整的运行时环境.

4.更轻松的迁移

Docker确保了执行环境的一致性,使得应用的迁移更加容易.

5.更简单的管理

所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

关于docker容器

docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)

Registry(注册中心)仓库

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry).

Docker安装

···

镜像相关命令

1.查看镜像
   输入  docker images

        REPOSITORY:镜像名称
        TAG:镜像标签
        IMAGE ID:镜像ID
        CREATED:镜像的创建日期(不是获取该镜像的日期)
        SIZE:镜像大小
image.png
搜索镜像:如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
 输入   docker search mysql(镜像名称)

        NAME:镜像名称
        DESCRIPTION:镜像描述
        STARS:用户评价,反应一个镜像的受欢迎程度
        OFFICIAL:是否官方
        AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
image.png
拉取镜像:就是从中央仓库中下载镜像到本地
    docker pull 镜像名称

拉取特定的版本请去dockerhub 查看软件的tag 来进行拉取,例如:
    docker pull 镜像名称:tag
    docker pull tomcat:latest
image.png
删除镜像
    docker rmi 镜像ID
//得先把容器都删了才能删除镜像

强制删除镜像:
    docker rmi -f c85fb9b8cc4f
镜像重命名:
    docker tag 旧镜像名称 新镜像名称
    docker tag 192.168.204.129:5000/springapp:v1 springapp

创建运行容器

1、创建容器常用的参数说明:
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。 即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

(1)交互式方式创建容器:
    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    -it还可以分开写 例如:
    docker run -i -t --name=容器名称 镜像名称:标签 /bin/bash
    只有加了-t参数这个容器才是交互式容器,交互式是指跟运行的容器进行交互。
    如果不要交互式-t参数可以不加。
    例如:运行一个centos容器,而且还得给这个容器创建一个伪终端。
    这个伪终端主要就是连接了centos,就例如一些工具连接了linux,然后通过这个工具
    跟centos交互。
    后面的/bin/bash主要是让这个伪终端执行容器的命令行。
    
    使用-t参数会直接进入容器,如下图:
image.png
退出当前容器
    exit

(2)守护式方式(后台运行)创建容器:
    docker run -di --name=容器名称 镜像名称:标签
    docker run -id --name=mycentos7 centos:7
    进入容器:
        docker exec -it 容器名称 (或者容器ID)  /bin/bash
    因为上面是以后台运行的方式启动容器的,所以当执行exit命令退出容器的时候。
        容器还是在后台运行着。

进入容器:
        docker exec -it 容器名称 (或者容器ID)  /bin/bash

//创建容器的时候,容器名称必须唯一,否则创建不了容器。

容器相关命令

查看正在运行的容器
    docker ps

查看所有容器(包含运行过的)
    docker ps –a

查看最后一次运行的容器
    docker ps –l

查看停止的容器
    docker ps -f status=exited

停止容器:
    docker stop 容器名称(或者容器ID)
    
启动容器:
    docker start 容器名称(或者容器ID)

文件拷贝:如果我们需要将文件拷贝到容器内可以使用cp命令
    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    
也可以将文件从容器内拷贝出来
    docker cp 容器名称:容器目录 需要拷贝的文件或目录

进入容器:
    docker exec -it 容器名称 (或者容器ID)  /bin/bash

删除容器
    docker rm 容器名称(容器ID)

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

查看容器IP地址

我们可以通过以下命令查看容器运行的各种数据
    docker inspect 容器名称(容器ID) 

也可以直接执行下面的命令直接输出IP地址
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。

执行命令构建镜像

    docker build -t='jdk1.8' .
        //注意后边的空格和点,不要省略

部署第一个Springboot项目

image.png
使用Dockerfile文件构建jar成镜像

1.此次例子使用的是Springboot的jar包构建成镜像。
2.使用maven将springboot项目打包成jar包
3.将此jar包上传到linux

构建开始
//在jar目录下生成Dockerfile
vi Dockerfile

-----------------------------------------------------------------------
#基于哪个镜像去构建镜像,如果当前环境没有 openjdk:8-jdk镜像,
    #则会去dockerhub下载openjdk:8-jdk镜像然后再构建
FROM openjdk:8-jdk

#此镜像的创作者
MAINTAINER ZHIMINGZOU

#将宿主机中的dockerdemo-0.0.1-SNAPSHOT.jar 复制到openjdk:8-jdk镜像里 别名:webapp.jar
ADD dockerdemo-0.0.1-SNAPSHOT.jar webapp.jar

#ENTRYPOINT 指令用于设定容器启动时第一个运行的命令及其参数。
ENTRYPOINT ["java","-jar","/webapp.jar"]

#容器启动完成后对外的端口映射
EXPOSE 8080
-----------------------------------------------------------------------


//不管有没有Dockerfile文件,都可以vi 保存之后就生成Dockerfile文件了
构建镜像
// -t后面指的是新构建成的镜像的名称,也可以写成-t='springapp:v1'
//后面的空格+. 不能漏,指的是根据当前目录下的Dockerfile文件去构建镜像
//中v1是此镜像的标签,也可以不加 不加默认是latest

    docker build -t springapp:v3 .
image.png
启动项目
docker run -it -p 8089:8080 springapp:v3
加上-d:后台运行
docker run -itd -p 8089:8080 springapp:v3
给springapp:v3 名命为springapp,方便stop 或者进入容器
docker run -itd -p 8089:8080 --name=springapp springapp:v3
//后台运行后,可以查看实时日志
docker logs -f --tail=100 springapp(容器name)

-d参数是让容器后台运行 
-p 是做端口映射,此时将服务器中的8080端口映射到容器中的8089(项目中端口配置的是8089)端口
image.png
访问项目

http://192.168.204.131:8089/demo

image.png

你可能感兴趣的:(Docker)