参考资料:

Docker容器技术&Docker-Compose实战教程(视屏教程)

《Docker快速入门总结笔记》

写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。

公司开发虽然一直有在使用docker,但只能说是会用,原理等则是一知半解,这里系统性的学习一下。

目录

一、docker概念、与传统虚拟机的对比、安装

        什么是docker

        docker与传统虚拟机的对比

        docker安装

        镜像、容器、仓库的关系

        怎么拉取远程仓库中的镜像

二、镜像的基本操作指令

        如何查看本地镜像

        如何拉取镜像

        如何删除镜像

三、容器的基本操作指令

        启动一个容器

        如何将容器内监听的端口映射到宿主机

        如何后台运行

        如何查看容器运行情况

        如何查看容器内运行日志

        如何查看容器内进程

        如何进入容器

        如何在操作系统与容器内传输文件

        (1)从容器复制文件到操作系统

        (2)从操作系统复制文件到容器

        如何实现宿主机和容器之间的目录关联

        (1)自定义数据卷目录

        (2)自动数据卷目录

        如何查看数据卷

        如何查看某个数据卷的细节

        创建数据卷

        删除无用数据卷

        如何查看网桥配置

        创建自定义网桥

        启动容器时指定网桥

        删除网桥

        查看网桥详细

四、Dockerfile

        Dockerfile的作用

        怎么执行Dockerfile

        关键字解析


一、docker概念、与传统虚拟机的对比、安装

        什么是docker

        类似虚拟机,但更轻量级,方便移植,每个应用部署在一个容器里,相当于一个进程,彼此之间隔离

        docker与传统虚拟机的对比

        docker安装

        镜像、容器、仓库的关系

        镜像:打包好的软件运行环境

        容器:镜像的一次运行

        怎么拉取远程仓库中的镜像

        docker pull 镜像名:tag,如 docker pull mysql:5.7

        怎么加速拉取远程镜像:

        修改远程仓库为阿里云

二、镜像的基本操作指令

        如何查看本地镜像

        docker images

        1.REPOSITORY 镜像的仓库源

        2.TAG 镜像的标签

        3.IMAGE ID 镜像的id

        4.CREATED 镜像的创建时间

        5.SIZE 镜像的大小

        如何拉取镜像

        1. docker pull  镜像名:版本号

        2. docker pull  镜像名:摘要

        如何搜索远程仓库的镜像:

        docker search mysql

        如何删除镜像

        docker image rm 镜像名:tag | 镜像名:id(后面可以跟多个镜像,同时删除多个镜像)

        docker image rm -f 镜像名:tag | 镜像名:id   (强制删除)

        docker rmi -f  $(docker images -aq)   (利用管道删除所有镜像)

三、容器的基本操作指令

        启动一个容器

        docker run 镜像名:tag 或者 镜像:id

        可以多次启动,每次启动都是一个单独的容器,结合之前讲的类似线程隔离理解

        docker run的运行流程如下

在这里插入图片描述

        如何将容器内监听的端口映射到宿主机

        docker run -p 8080(宿主机端口) :8080(容器内监听的端口) 镜像名:tag 或者 镜像:id

        (因为容器内监听的是容器内的端口,不映射的话无法从宿主机访问到容器内的运行实例)

        如何后台运行

        docker run -d(后台运行) -p 8080:8080 --name tomcat(我们可以自己给容器取名) 镜像名:tag

        这里-p可以设置多个,方便映射多个端口,如 -p 5672:5672 -p 15672:15672(因为docker run启动的容器是控制台模式,退出即关闭,所以需要后台运行)

        如何查看容器运行情况

        docker ps

        docker ps -a (查看所有容器,包括运行的和停止的)

        如何查看容器内运行日志

        docker logs 容器id | 容器名称(只展示截至目前为止的日志)

        docker logs -f 容器id | 容器名称 (展示实时日志)

        docker logs -tf 容器id | 容器名称 (展示日志并且带上时间戳)

        docker logs --tail n(任意数字) 容器id | 容器名称 (查看末尾的n行)

        如何查看容器内进程

        docker top 容器id | 容器名称

        如何进入容器

        docker exec -it 容器id | 容器名称 bash(容器内类似一个只携带镜像所包含的软件的微型的操作系统,只支持最简单的操作指令)

        如何在操作系统与容器内传输文件

        (1)从容器复制文件到操作系统

        docker cp 容器唯一标识(name或者id) :容器内资源路径 操作系统文件路径/文件目录

        (2)从操作系统复制文件到容器

        docker cp 文件|目录名 容器唯一标识(name或者id):/容器内资源路径

        如何实现宿主机和容器之间的目录关联

        (1)自定义数据卷目录

        docker run -d -p 8080:8080 --name 容器名 -v 宿主机目录:容器目录 镜像名:tag

        注意:宿主机目录必须是绝对路径

        (2)自动数据卷目录

        docker run -d -p 8083:8080 --name 容器名 aa:容器目录 镜像名:tag

        第二种方式相当于实现了容器内文件的备份,即使容器被删除文件也还在,适用mysql等镜像

        如何查看数据卷

        docker volums ls

        如何查看某个数据卷的细节

        docker volums inspect 卷名

        创建数据卷

        docker volume create 卷名

        删除无用数据卷

        docker volume prune

        docker volume rm 卷名

        如何查看网桥配置

        docker network ls

        创建自定义网桥

        docker create ems(网桥名) ===> docker create -d bridge ems(网桥)

        启动容器时指定网桥

        docker run -d -p 8080:8080 --network tomcat01 tomcat:8.0-jre8

        删除网桥

        docker netword rm 网桥名称

        查看网桥详细

        docker inspect ems

四、Dockerfile

        Dockerfile的作用

        用来构建我们的自定义镜像

        怎么执行Dockerfile

        docker build -t 镜像名:tag .(注意最后面有个点,代表工作目录,即Dockerfile所在目录)

        docker build -f dcokerfile文件名  -t 镜像名:tag .

        第一个语句是使用官方默认文件名Dockerfile,第二个语句则是我们自定义文件名,因此需要加-f来指定文件名。

        关键字解析

        注意:所有的关键字全部需要大写

        FROM

        描述基于哪一个镜像创建,必须写在Dockerfile的第一行

         使用docker build -t  镜像名:tag 新建我们自己的镜像

         使用docker images查看,可以看到新建的镜像

        RUN

        定义构建镜像时需要执行的指令,比如这里RUN yum install -y vim

        就是指在构建镜像时下载vim指令

        RUN的参数格式可以和linux一样,也可以写成json的格式。

        需要注意的是,这两种写法在docker中会被认为是2个不同的指令,虽然他们效果相同。

        虽然效果上没有差异,但是docker build在构建时会检查之前是否已经构建过相同指令(即分层的效果),如果相同的话就不会重新构建,上面这2种写法不能互相间复用之前的分层,会重新构建。

        EXPOSE

        用来指定对外开放的端口

        WORKDIR

        用来指定工作目录

        注意,WORKDIR必须是绝对路径,除非前面已经提供了绝对路径

        比如下面,WORKDIR /data,WORKDIR bb ,最后的工作目录是/data/bb(路径不存在的话会自动创建)

        COPY

        用来将工作目录中的文件复制到镜像中

        ADD

        和COPY功能类似,却别在于ADD后面的参数可以设置URL,以此来下载网络资源,也可以跟压缩包,复制完成后ADD会自动解压

 

        VOLUME

        定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

        ENV

        定义环境变量

        ENTRYPOINT

        指定容器启动的时候要运行的命令,命令可以追加

        CMD

        效果同ENTRYPOINT,指定容器启动的时候要运行的命令,但只有最后一个会生效

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐