【Docker】快速入门手册

目录

1.概述

1.1.安装

1.2.阿里云镜像加速

1.3.运行原理

2.常用操作

2.1.帮助命令

2.2.镜像操作

2.3.容器操作

2.3.1创建、启动

2.3.2.退出、停止

2.3.3.进入交互式界面

2.3.4.守护式容器交互

2.3.5.查看

2.3.6.删除

2.3.7.拷贝

3.容器数据卷

3.1.概述

3.2.使用

4.数据卷容器

4.1.概述

4.2.使用

5.安装Mysql示例

6.处理命令找不到

7.DockerFile

7.1.示例解析

7.2.构建过程

7.3.指令

7.4.案例分析

案例一

案例二

8.推送镜像


1.概述

Docker是一个开源的应用容器引擎。

Docker的理念类似于Windows的镜像系统:

原生的Windows系统拿到手以后要安装一系列的东西,如果每个人拿到手都要重新安装会很麻烦,可以一个人安好一份完整的以后做出镜像系统,其他人直接拿来就用。

Docker支持将安装好的软件编译打包成镜像,其他服务器直接拿镜像来运行就可以。

运行的一个镜像就是一个容器。

Docker主机(host):安装了docker程序的机器。(docker是直接安装在系统之上的)

Docker客户端(client):就是一个客户端程序,连接docker主机,通过命令行或者其他工具来进行操作。

Docker仓库(registry):用来保存各种打包好的docker镜像。

Docker镜像(image):打包好的软件。

Docker容器(container):镜像启动后的实例称为一个容器。每一个镜像运行一次就会产生一个容器。容器是独立运行的一个或者一组应用。

仓库镜像容器是docker的三大要素

1.1.安装

Docker要求Linux的内核版本必须3.10

查看内核版本:uname –r

升级内核版本:yum update

安装docker依赖:yum install  -y epel-release

安装docker:yum install docker

启动docker:systemctl start docker

停止docker: systemctl stop docker

查看docker版本号:docker –v

开机自启docker:systemctl enable docker

配置文件: etc/sysconfig/  路径下名为docker的文件

1.2.阿里云镜像加速

1.3.运行原理

所有操作进程与守护进程打交道,守护进程负责创建一个个的docker容器来跑镜像。

2.常用操作

2.1.帮助命令

查看docker版本信息  docker version

查看docker详细信息  docker info

查看全部命令  docker  --help

2.2.镜像操作

docker的镜像都存在  docker hub上面

查找全部镜像:

docker search 镜像名

查找超过某star数的镜像:

docker search  镜像名  -f  stars=数量值

拉取镜像:

docker pull 镜像名  或者  docker pull 镜像名:tag(tag版本号,在hub上可以查找到)

不跟tag号,默认拉取latest版本。

查看当前操作系统中所有镜像:docker images

查看当前操作系统中的所有当前镜像的ID:image  -q

显示当前操作系统中的所有镜像的ID:image  -qa

删除镜像: docker rmi IMAGE ID(可以通过docker images看到)

删除镜像前要删除该镜像的所有容器才能删除镜像成功

2.3.容器操作

运行镜像就会产生一个容器

2.3.1创建、启动

1.创建容器

run命令会创建一个新的容器。

docker run [options] 镜像名 [command] arg

创建交互式容器:

交互式容器允许docker外的进程直接与docker内的容器进行交互

一般会it命令连用,给予交互式容器一个伪输入终端,以便进行交互。

创建后,会自动进入容器中的一个伪终端界面。

创建守护式容器:

守护式容器,即启动一根守护进程,docker外的进程不能直接与docker内的容器进行交互,而是通过守护进程交互,守护进程再与docker中的容器交互。

创建后,会打印容器ID,然后立即自杀!

原因是创建交互式进程的时候有个伪终端挂着,等待输入,使得容器一直处于一种被使用的状态,而守护式进程启动后,docker发现这个容器什么事儿都没做,因此直接kill掉。

2.启动容器

start命令会启动一个已有的容器。

docker start CONTAINER ID(可以通过docker ps-a命令查看)

2.3.2.退出、停止

退出容器

容器停止并退出:(在交互界面)exit

容器退出但不停止:ctrl+P+Q

停止容器

温柔停止(点关机键关机):

docker stop CONTAINER ID(可以通过docker ps-a命令查看)

强制停止(拔电源):

docker kill CONTAINER ID

2.3.3.进入交互式界面

docker attach 容器ID

2.3.4.守护式容器交互

在宿主机上使用:

docker exec -it 容器ID

-it会给出一个虚拟终端,但是此时不再是直接与容器交互。

而是通过exec指令与守护线程进行交互,守护进程再与容器进行交互。

2.3.5.查看

查看运行中的容器详细信息:docker ps

查看运行中的容器ID:docker ps -q

查看所有容器详细信息:docker ps  -a

查看所有容器ID:docker ps -qa

2.3.6.删除

一般删除:

要求容器处于停止状态。

docker rm CONTAINER ID

强制删除:

可以强制删除运行状态中的容器

docker rm -f CONTAINER ID

删除多个容器:

2.3.7.拷贝

将容器内的文件拷贝到容器外的宿主机上:

3.容器数据卷

3.1.概述

类似于redis的RDB和AOF

数据卷,即将容器内部的数据持久化到宿主机上,也可以将宿主机上的数据同步进容器中来。两边同时维护数据卷,数据卷的改动,对两边都生效。

3.2.使用

docker  run  –it  -v /宿主机绝对路径目录:/容器内目录  镜像名

文件夹不需要新建,执行该条指令后会自动在宿主机容器的对应路径下生成该文件夹

4.数据卷容器

4.1.概述

类似于redis的主从复制。某个容器挂载数据卷,其他容器通过挂载这个卷容器实现数据共享,直接挂载数据卷的这个容器称为数据卷容器。

4.2.使用

挂载数据卷容器要配合dockerfile来实现,主要是要使用dockerfile在数据卷容器中编写脚本,在脚本中声明挂载的数据卷有哪些。然后将数据卷容器打包成镜像,要使用数据卷容器的其他容器创建容器的时候直接就使用数据卷容器的镜像,这样创建出来的子容器才会挂载数据卷容器成功。

主要是因为要声明,挂载的数据卷关系,否则,即使挂载了节点,也不会挂载到父容器的数据卷。

构建数据卷容器镜像:

dockerfile的内容为:

数据卷容器挂载数据卷:

其他容器挂载数据卷容器:

5.安装Mysql示例

docker run

-p 3306:3306

--name mysql01

-v /mysql/conf:/etc/mysql/config.d

-v /mysql/logs:/logs

-v /mysql/data:/var/lib/mysql

-e MYSQL_ROOT_PASSWORD=admin

-d mysql:5.6

如果因为权限问题run失败,则加上--privileged=true来强制获得权限

docker run -p 3306:3306  --name mysql01 --privileged=true  -v /mysql/conf:/etc/mysql/config.d -v /mysql/logs:/logs  -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin  -d mysql:5.6

处理navcat连接失败:

Docker MySql报2059错误: Authentication plugin 'caching_sha2_password' cannot be loaded_docker authentication plugin'caching-CSDN博客

navcat连接的时候注意先关闭Linux的防火墙!!!

<1> docker  start  mysql        进入MySql

<2> docker  ps  -a       查出自己创建的container(容器)的ID

<3> docker  exec  -it  63c9e29aelef  bash   (每个人创建的container ID都不一样)

<4> mysql  --user=root  --password

<5>  ALTER  USER  'root'  IDENTIFIED  WITH  mysql_native_password  BY  '1234567';  

6.处理命令找不到

处理vi或者vim命令找不到:

apt-get update

apt-get install vim

7.DockerFile

dockerFile,用来构建Docker镜像的构建文件,是一个由一系列命令和参数构成的脚本。

构建一个Docker镜像分为三步:

  1. dockerFile

编写一个dockerFile

  1. docker build

执行docker build指令

  1. run

运行镜像

7.1.示例解析

dockerFile是以键值对的方式指定的一组命令参数,格式为:

命令  参数

命令后必须带单数,空命令不合法。

from scratch:

继承scratch镜像,scratch是基础镜像,所有镜像只有继承了scratch才会成为一个镜像,类似于JAVA中的Object类。

maintainer:

作者信息,大家约定的格式是作者+邮箱

ADD:

LABEL:

标签,关于镜像的一些详细信息。

CMD:

设置镜像进来后的路径在哪儿。

即docker run -it XXX后进来的路径

7.2.构建过程

docker镜像的构建过程,即dockerFile的从上到下执行。dockerFile从上到下执行,每一条指令都会创建一个新的镜像层,并对镜像进行提交,执行的效果就会是从一个基础镜像开始对镜像进行层层封装,最后包装出一个大的镜像来。

7.3.指令

FROM:

FROM,指定父镜像,可以是基础镜像,也可以是其他镜像,反正本质上一定会是继承自基础镜像。

MAINTAINER:

镜像维护者的姓名和邮箱。

RUN:

RUN,构建时候额外需要运行的命令,这条指令是当前平台的指令,遇到RUN指令就会运行RUN后面该条指令。入一条Linux指令或者Windows指令,一般是用来在当前平台做一些资源或者权限的操作,比如创建文件夹,给文件夹进行权限限定等操作。

EXPOSE:

该镜像对外暴露的端口号。

WORKDIR:

指定在创建容器后,终端登录进来的默认路径,

如指定 /data 终端登录进来就会是在/data路径下。

ENV:

用来设置环境变量。

ADD、COPY:

将一些资源加入镜像中,

ADD会加载后并解压,COPY只会加载。

VOLUME:

用来建里容器数据卷。

CMD、ENTRYPOINT:

用来指定容器启动时需要运行的命令,这条命令是指当前平台的命令,如Linux的指令或者Windows的指令。

CMD可以允许存在多个,但是后面的会覆盖前面的,也就是说只有最后一个才有效。

ENTRUPOINT可以运行存在多个,后面的会追加到前面的去,也就是说会叠加生效。

ONBUILD:

指定当前镜像被继承时所触发的动作。

7.4.案例分析

案例一

docker hub上存在一个精简版的centos镜像,该镜像中的centos只有内核,没有其余任何功能,可以通过编写dockerFile对其进行二次打包,为其增加vim功能和net-tools中的功能。

编写完dockerFile后,使用docker的build指令来构建镜像:

-f 指定dockerFile的位置,-t指定构建后的镜像的名称和路径 . 表示当前路径。

案例二

该案例使用centOS为父镜像,为其加入tomcat、JDK,构成一个tomcat镜像。

该案例主要是为了展示ADD、COPY的作用。

8.推送镜像

推送镜像的前提是镜像要运行起来,因为推送的时候要使用到镜像的容器来向远端仓库上进行推送。

docker的推送和git的推送很像,都是commit然后push

commit:

push:

原文地址:https://blog.csdn.net/Joker_ZJN/article/details/135893771

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。您可以选择
本文介绍compose配置文件参数的使用,熟练编写compose文件 [root@docker lnmp]# cat lnmp.yaml version: &#39;3&#39; services: nginx: build: /root/docker_demo/nginx/ ports: - &q
环境 docker-machine主机:192.168.1.9 docker主机:192.168.1.10 步骤: 安装docker-machine 创建ssh密钥对,实现两主机无密登录 创建docker主机,命名host1 变更docker环境变量 运行容器查看两端是否同步 镜像容器同步测试成功
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
https://blog.csdn.net/wanglei_storage/article/details/77508620 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行。然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is grea
docker rm `docker ps -a | grep Exited | awk &#39;{print $1}&#39;` 删除异常停止的docker容器 docker rmi -f `docker images | grep &#39;&lt;none&gt;&#39; | awk &#3
什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。 但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS中的附加进程非常强大,目前提供了9种常用的附加方式。 在当前.Net Core支持跨平台的大背景下,其中Linux环境和
https://www.cnblogs.com/bigberg/p/8867326.html 一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行
.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。 实现 安装Nuget包 &lt;PackageReference Include=&quot;Selenium.Chrome.WebDriver&quot; Version=&quot;85.0.0&quot; /&g
原文&#160;https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 co