一、基本概念:
Docker 是在 2013 年的 PyCon 上首次正式对外公布的。它带来了一种先进的软件交付方式,即,通过容器镜像进行软件的交付。工程师们只需要简单的 docker build 命令即可制作出自己的镜像,并通过 docker push 将其发布至 DockerHub 上。通过简单的 docker run 命令即可快速的使用指定镜像启动自己的服务。
1. 三个基本概念:
镜像(Image)
容器(Container)
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
| 概念 | 说明 |
|---|---|
| Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统 |
| Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。镜像是静态的定义,容器可以被创建、启动、停止、删除、暂停等。 |
| 1.Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 2.Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。3.一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。4.通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
| Docker | 面向对象 |
|---|---|
| 容器 | 对象 |
| 镜像 | 类 |
2.和虚拟机的区别



3.解决的难题
环境配置
4.优势。
(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,
速度就快很多。
(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟
机都是独享资源。
(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
二、安装DOCKER
2.1 Linux 系统安装DOCKER
2.1.1.windows下安装ubuntu子系统

微软应用商店下载(需要登陆微软账号) 如没有可以选择下载安装包离线安装
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#downloading-distributions


2.1.2修改软件源
把系统的软件源修改为国内,后面安装软件时加快速度,参考
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu
apt update
2.1.3 apt 安装
apt install docker.io


2.1.4
启动
service docker start

最后没启动成功,因为ubuntu子系统的原因,无用的知识增加了
2.2 windows 下安装
2.2.1 启动windows hyper-v

2.2.2 下载安装包安装
略
2.2.3 下载linux内核安装包



三、基本命令
3.1.常用指令
拉取tomcat镜像: docker pull tomcat
启动一个镜像(创建容器) : docker run -d tomcat -d 表示后台启动
查看本地所有镜像: docker image ls 或 docker images
删除镜像: docker image rm tomcat 或 docker rmi tomcat
查看本地容器: docker container ls ( docker ps )
删除指定容器: docker container rm b5e2437bf63f
启动容器: docker container start b5e2437bf63f
停止容器: docker container stop b5e2437bf63f
Docker原本的命令大约有40个,很难记忆这个完整列表,因为这些命令与容器、图像、网络、卷等相关。Docker意识到这种老的命令组织方式在长期内是
不可持续的,因此他们添加了“管理命令”,这有助于对所有命令进行分类,并使命令本身更加一致。
例如docker container ls是docker ps的新方法,当然它更多的是输入,但它的作用更清晰。同样,现在可以运行docker image ls、docker network ls或
docker volume ls。
3.2 获取镜像,以tomcat举例
镜像地址:https://registry.hub.docker.com/
3.2.1 搜索镜像
docker search tomcat

3.2.2 拉取镜像
tomcat docker pull tomcat

3.2.3 启动
启动镜像: docker run -d -p 8081:8080 tomcat
-d表示后台允许
-p 8081:8080 表示将docker的8080 端口映射到主机的8081 端口

3.2.4 进入容器并修改
交互式命令 docker exec -it 1a9d /bin/bash
exec 在允许的容器中执行命令
-i 交互式
-t 分分配一个终端
创建一个index文件,内容为 tomcat start
访问index 文件,http://localhost:8081/test/index 可以看到输出了指定内容


四、构建镜像
4.1 基于已有镜像的容器创建
4.1.1 提交修改
PS C:\Users\liming.xia> docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a9d842d6479 tomcat "catalina.sh run" 16 hours ago Up 16 hours 0.0.0.0:8081->8080/tcp hopeful_carson
df73ddee9248 tomcat "catalina.sh run" 16 hours ago Exited (143) 16 hours ago vibrant_kare
PS C:\Users\liming.xia>
PS C:\Users\liming.xia> docker commit -a 'x' -m 'tomcat v1' 1a9d8 tomcat:index
sha256:fe64e71d588bbde837d81fb3e24af127a933b990f40a4a54a972d0a1e1bbc7aa
PS C:\Users\liming.xia>
PS C:\Users\liming.xia> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat index fe64e71d588b 10 seconds ago 680MB
openjdk latest 5f94f53bbced 47 hours ago 471MB
tomcat latest fb5657adc892 2 days ago 680MB
alpine/git latest c6b70534b534 4 weeks ago 27.4MB
ubuntu latest ba6acccedd29 2 months ago 72.8MB
4.1.2 查看所有镜像,已经新增了一个tomcat:index镜像

4.1.3使用tomcta:index 镜像启动一个container


4.2.基于Dockerfile创建
示例:基于openjdk 镜像 构造一个带自己项目的镜像
4.2.1 准备文件:
1. Dockerfile
2. demo.jar
3. start.sh
Dockerfil文件
FROM openjdk
copy demo.jar /home/webapps/
copy start.sh /home/webapps/
ENTRYPOINT ["java","-jar","/home/webapps/demo.jar"]
EXPOSE 8080
start.sh文件
#!/bin/bash
nohup java -jar /home/webapps/demo.jar &
4.2.2开始构建image
docker build -t linux-openjdk:demoV1 .
PS C:\windows\system32\ubuntuXiaV1> docker build -t linux-openjdk:demoV1 .
[+] Building 1.6s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 142B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/openjdk:latest 0.0s
=> [1/4] FROM docker.io/library/openjdk 0.1s
=> [internal] load build context 0.3s
=> => transferring context: 17.44MB 0.2s
=> [2/4] COPY demo.jar /home/webapps/ 0.1s
=> [3/4] COPY start.sh /home/webapps/ 0.0s
=> [4/4] RUN bash /home/webapps/start.sh 0.9s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:93247e9e62feaa5da7b823a4b2b5ba54d42076cc4560a389a7e2aa9efa3633aa 0.0s
=> => naming to docker.io/library/linux-openjdk:demoV1 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

4.2.3 查看docker层
docker image history linux-openjdk:demoV1

4.2.4 运行构建好的镜像
运行镜像 docker run -d -p 9091:8080 linux-openjdk:demoV1
