Docker 入门到实战教程

1. Docker简介

1.1 什么是虚拟机?

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整的计算机系统。

1.2 什么是Docker

Docker 是一个快速交付应用、运行应用的技术;

1、可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

2、容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;

3、启动、移除都可以通过一行命令完成,方便快捷;

1.3 为什么选择Docker?

对于开发和运维人员来说,最希望的效果就是一次创建或者配置后,可以在任意地方、任意时间让应用正常运行,具体来说,Docker优势主要有以下几个方面:

  • 快速交付和部署

    使用docker,开发人员可以使用镜像快速构建一套标准的开发环境;开发完成后,测试和运维人员可以使用完全相同的环境部署代码,只要是开发测试过的代码就可以确保在生产环境无缝运行。docker可以快速创建和删除容器,实现快速迭代。

  • 高效的资源利用

    运行docker容器不需要额外的虚拟化管理程序的支持,docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。

  • 轻松的迁移和扩展

    docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等,同时支持主流的操作系统发行版本,这种兼容性让用户可以在不同平台间轻松的迁移应用。

  • 简单的更新管理

    使用Dockerfile生成镜像的方式,只需要小小的配置修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式进行分发和更新,从而实现自动化且高效的容器管理。

1.4 Docker与虚拟机的区别

1、Docker是一个系统进程,虚拟机是在操作系统中的操作系统。

2、Docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般;

1.5 Docker 组件

1.5.1 Docker服务器与客户端
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

 docker client是一个泛称,它可以是命令行docker,也可以是遵循了docker api规则的客户端,简单地说可以理解为一个用于交互/发送指令的接口。

1.5.2 Docker镜像

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

1.5.3 Docker容器

容器是打包代码及其所有依赖的软件的标准单元,用于开发、交付和部署,使应用可以从一个环境快速可靠地运行到另一个环境,而Docker则是容器技术的一种实现,是一个开源的应用容器引擎,是用来管理容器的。

1.5.4 Registry(仓库)

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

用户也可以在Docker Hub上保存自己的私有镜像。https://hub.docker.com/

1.6 Docker 的优点

        1、可以使用镜像快速构建一套标准的开发环境,快速部署代码;

        2、高效的资源利用,可以实现更高的性能,同时对资源的额外需求很低;

        3、兼容性高,让用户可以在不同平台间轻松的迁移应用;

        4、可以实现自动化且高效的容器管理。

1.7 Docker 镜像加速

MacOS Docker 安装 | 菜鸟教程

1.8 Docker重要概念

1、镜像(image): Docker 将应用程序以及所需的依赖、函数库、环境、配置等文件打包到一起,成为镜像

2、容器(Container): 镜像中的应用程序所运行后形成的进行就是容器,只是Docker会给容器做隔离,对外不可见;

3、DockerHub: 一个 Docker 镜像托管平台;

1.9 数据卷操作

数据卷:是一个虚拟目录,指向宿主机文件系统中的某个目录,可以将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。

2. Docker 命令

容器生命周期管理

创建容器(运行容器)
docker run -d -p nginx:latest --name nginx2023
启动容器
docker start 容器ID 
重启容器
docker restart 容器ID
停止容器
docker stop 容器ID
删除容器(需要先停止在删除)
docker rm  容器ID
创建容器(不运行容器)
docker create nginx:latest
进入容器终端内
docker exec -it nginx:latest /bin/bash

容器操作

查看运行的容器
docker ps
查看所有的容器
docker ps -a
查看镜像的详细信息
docker inspect nginx:latest
查看容器日志
docker logs 容器ID
把运行中的镜像打包成tar压缩包
docker export -o 容器ID
输出容器的所有映射端口
docker port 容器ID
输出容器的资源使用情况
docker stats

容器 rootfs 命令

使用运行的容器ID重新生成一个新的镜像
docker commit nginx:2023 容器ID
本地与容器内数据连接
docker cp 容器ID:/wwww /tmp
docker cp /tmp/www 容器ID:/wwww
检查容器里面的文件结构
docker diff 容器ID

镜像仓库

登录镜像仓库
docker login -u admin -p amdin
登出镜像仓库
docker logout
拉取镜像
docker pull nginx:latest
推送镜像
docker push

数据卷操作

创建数据卷
docker volume create 数据卷名称
列出所有数据卷
docker volume ls
查看数据卷详情
docker volume inspect 数据卷名称
删除1个或者多个数据卷
docker volume rm 数据卷名称
删除未使用的数据卷
docker volume prune

本地镜像管理

输出本地所有镜像
docker images
删除镜像
docker rmi 镜像ID
构建镜像
docker build -t nginx:2023 .
执行镜像ID输出tar压缩包
docker save -o 名称.tar 镜像:镜像版本
导入镜像(使用 docker save 导出的镜像)
docker load -i 名称.tar
创建镜像(使用 docker save 导出的镜像)
docker import 名称.tar 新的镜像:镜像版本

3. Docker 构建镜像

3.1 使用 docker commit 对已有的镜像进行构建;

docker ps 找到运行中的容器,并复制容器ID

 使用 docker commit 对已有的镜像进行构建;

备注:cbb66a4763d3 是容器运行ID,jenkins:2023是新的镜像名以及tag

3.2 使用 docker build -t  构建镜像;

3.2.1 基于 基础镜像 进行构建

使用 Dockerfile构建镜像:

什么是Dockerfile

Dockerfile 就是一个文本文件,其中包含了一个个的指令,用指令来说明要执行什么操作来构建镜像。每条指令都会形成一层layer。

Dockerfile常用指令:

FROM——指定基础镜像
MAINTAINER——指定维护者信息
RUN——运行指令
COPY——复制文件\目录
ADD——更高级的复制文件\目录
ENV——设置环境变量
ARG——构建参数
EXPOSE——暴露端口
CMD——容器启动命令
ENTRYPOINT——入口点
ENTRYPOINT和CMD组合使用
VOLUME——定义匿名卷
USER——指定当前用户
WORKDIR——指定工作目录
ONBUILD——为他人做嫁衣

 Dockerfile注意事项:

  1. 指令大小写不敏感,但是为了区分最好习惯用大写 
  2. Dockerfile非注释行第一行必须是FROM 
  3. 记住在宿主机新建时文件名必须是Dockerfile ,无后缀
  4. Dockerfile指定一个专门的目录为工作空间 
  5. 所有引入映射的文件必须在这个工作空间目录下

3.2.1 Dockerfile基本结构;

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。

1.一般Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。如下:

创建文件夹
mkdir Dockerfile

创建文件
vi Dockerfile

写入以下内容:
FROM nginx #基于 nginx 镜像
RUN echo "This is a nginx image built locally" > /usr/share/nginx/html/index.html # 把内容写入到 nginx 容器某个地址里面

2. 使用 docker build -t 构建镜像;

备注:必须在dockerfile所在目录进行构建,后面的 . 表示当前目录。

如果不在dockerfile 目录内进行构建,后面的 . 就改成 dockerfile 的绝对路径即可;

 3. 使用 docker images |grep 查找镜像

 4 使用 docker run 运行镜像,并进行访问;

备注:-d 表示后台运行,-p 表示端口映射,nginx:2023 使用镜像以及tag

 访问 容器;

3.2 基于 jar包 进行构建镜像; 

1.先把 jar包 上传到dockerfile文件夹内

 2.编写 Dockerfile 文件

FROM openjdk:8-jdk-alpine  基于openjdk 作为基础镜像
MAINTAINER "zhaoyehua"  镜像维护人
WORKDIR /Users/xxxx/Desktop/git  指定工作目录(功能和 cd 命令一样)
COPY ./java-maven-demo-0.0.1.jar /tmp/java.jar  把当前目录下的jar 拷贝到容器指定文件夹内
EXPOSE 8000  对外暴露端口
ENTRYPOINT java -jar ./java.jar  接口点

3.构建镜像

4.运行镜像

3.3 基于代码进行构建镜像(单脚本);

1、拉取python镜像;

docker pull python:3.9.16-alpine   拉取镜像
docker images    搜索已安装镜像,查看是否安装成功

2、打开pycharm终端,下载依赖;

pip freeze > requirements.txt   后边的txt文件名可以自定义,敲完命令会发现已经导出该文件在你的项目根目录下

注意:导入 依赖后,可以打开看一下。是否有错误的;

 3、创建文件夹;

创建文件夹
mkdir Dockerfile

把 python 代码放到 Dockerfile 文件夹内
把 requirements.txt 依赖包放到  Dockerfile 文件夹内

创建文件
vi Dockerfile

写入以下内容
FROM python:3.9.16-alpine  基于基础镜像镜像构建镜像
USER root   使用root用户进行操作
WORKDIR /app  设置容器的工作空间目录,自定义名称
ADD ./requirements.txt /app 把当前目录内的依赖包放到容器的 /app内
RUN pip install -r requirements.txt 下载依赖包
COPY ./dpo.py /app 把当前目录内的python代码 复制到容器的 /app 内
CMD ["python", "./dpo.py"] 执行 python 代码 

注意:dockerfile 里面的指令可以理解为,在一个全新的python环境内进行测试。

类似一步一步在python环境内进行操作,最终执行python脚本。

4、构建镜像

5、查找构建的镜像以及运行容器

6、获取容器日志

查找所有容器 docker ps -a 

找到 python 容器(处于停止状态,因为在python中就跑了一下脚本,并不会一直运行python容器)

查看 python容器 日志 docker logs 容器ID,日志内容展示的是python里面的dpo.py运行的代码结果;

3.4 基于代码进行构建镜像(多脚本、添加守护进程);

后续加入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值