docker

一、基本概念:

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子系统

image.png

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

image.png
image.png

2.1.2修改软件源

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

apt update

2.1.3 apt 安装

apt install docker.io
image.png

image.png

2.1.4

启动

service docker start
image.png

最后没启动成功,因为ubuntu子系统的原因,无用的知识增加了

2.2 windows 下安装

2.2.1 启动windows hyper-v

image.png

2.2.2 下载安装包安装

2.2.3 下载linux内核安装包

image.png

image.png
image.png

三、基本命令
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
image.png

3.2.2 拉取镜像

tomcat docker pull tomcat
image.png

3.2.3 启动

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

3.2.4 进入容器并修改

交互式命令 docker exec -it 1a9d /bin/bash
 
exec 在允许的容器中执行命令
-i 交互式
-t 分分配一个终端

创建一个index文件,内容为 tomcat start

访问index 文件,http://localhost:8081/test/index 可以看到输出了指定内容
image.png
image.png

四、构建镜像

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镜像

image.png

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

image.png

image.png

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
image.png

4.2.3 查看docker层

docker image history linux-openjdk:demoV1
image.png

4.2.4 运行构建好的镜像

运行镜像 docker run -d -p 9091:8080 linux-openjdk:demoV1
image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容