docker

author author     2022-08-16     469

关键词:

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

 

Docker的三个概念

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

 

容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

 

仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

 

Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:

[[email protected] ~]# docker version

Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64


查看Docker的帮助信息:# docker --help。

各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。

 

Docker中关于镜像的基本操作

安装完Docker引擎之后,就可以对镜像进行基本的操作了。我们从官方注册服务器(https://hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:

[[email protected] ~]# docker search centos # 查看centos镜像是否存在
[[email protected] ~]# docker pull centos # 利用pull命令获取镜像
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest

[[email protected] ~]# docker images # 查看当前系统中的images信息
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 9 days ago 196.5 MB

 

 

以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。

(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

[[email protected] ~]# docker run -it centos:latest /bin/bash # 启动一个容器
[[email protected] /]# # 这里命令行形式变了,表示已经进入了一个新环境
[[email protected] /]# git --version # 此时的容器中没有git
bash: git: command not found
[[email protected] /]# yum install git # 利用yum安装git
......
[[email protected] /]# git --version # 此时的容器中已经装有git了
git version 1.8.3.1

 

此时利用exit退出该容器,然后查看docker中运行的程序(容器):[[email protected] ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago Exited (0) 3 minutes ago angry_hodgkin

 

这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:

[[email protected] ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos git 52166e4475ed 5 seconds ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB

 

其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。

 

此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。

[[email protected] ~]# docker run -it xianhu/centos:git /bin/bash
[[email protected] /]# git --version
git version 1.8.3.1
利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。

 

(2)利用Dockerfile创建镜像Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。

# 说明该镜像以哪个镜像为基础
FROM centos:latest

# 构建者的基本信息
MAINTAINER xianhu

# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/

 

有了Dockerfile之后,就可以利用build命令构建镜像了:

[[email protected] ~]# docker build -t="xianhu/centos:gitdir" .

 

其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。

 

构建完成之后,同样可以使用docker images命令查看:

[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos gitdir 0749ecbca587 34 minutes ago 359.7 MB
xianhu/centos git 52166e4475ed About an hour ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB
以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。

 

[[email protected] ~]# docker rm container_name/container_id
[[email protected] ~]# docker rmi image_name/image_id
镜像其他操作指令:[[email protected] ~]# docker save -o centos.tar xianhu/centos:git # 保存镜像
[[email protected] ~]# docker load --input centos.tar # 加载镜像

 

Docker中关于容器的基本操作

在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。

[[email protected] ~]# docker run -it centos:latest /bin/bash
这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。此时如果使用exit退出,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为Up。

除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:

[[email protected] ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"
[[email protected] ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"
这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。

 

启动、停止、重启容器命令:

[[email protected] ~]# docker start container_name/container_id
[[email protected] ~]# docker stop container_name/container_id
[[email protected] ~]# docker restart container_name/container_id
后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:[[email protected] ~]# docker attach container_name/container_id
删除容器的命令前边已经提到过了:[[email protected] ~]# docker rm container_name/container_id

 

Docker中关于仓库的基本操作

Docker官方维护了一个DockerHub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到DockerHub上。

 

在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。

(1)访问https://hub.docker.com/,如果没有账号,需要先注册一个。

(2)利用命令docker login登录DockerHub,输入用户名、密码即可登录成功:

[[email protected] ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don‘t have a Docker ID, head over to https://hub.docker.com to create one.
Username: xianhu
Password:
Login Succeeded
(3)将本地的镜像推送到DockerHub上,这里的xianhu要和登录时的username一致:

[[email protected] ~]# docker push xianhu/centos:git # 成功推送
[[email protected] ~]# docker push xxx/centos:git # 失败
The push refers to a repository [docker.io/xxx/centos]
unauthorized: authentication required
(4)以后别人就可以从你的仓库中下载合适的镜像了。

[[email protected] ~]# docker pull xianhu/centos:git
对应于镜像的两种创建方法,镜像的更新也有两种:

创建容器之后做更改,之后commit生成镜像,然后push到仓库中。更新Dockerfile。在工作时一般建议这种方式,更简洁明了。

 

这里再一次回顾一下三个重要的概念:镜像、容器、仓库:

从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

 

利用Docker创建一个用于Flask开发的Python环境

上边已经解释和练习了Docker的基本操作命令,下边以实例的形式完整走一遍流程。我们创建一个用于Flask开发的Python环境,包含Git、Python3、Flask以及其他依赖包等。完整命令如下:

[[email protected] ~]# docker pull centos

[[email protected] ~]# docker run -it centos:latest /bin/bash
# 此时进入容器,安装Python3、Git、Flask及其依赖包等,安装完成后exit退出
[[email protected] ~]# docker commit -m "Flask" -a "xianhu" container_id xianhu/flask:v1
[[email protected] ~]# docker push xianhu/flask:v1
Docker的功能和特性还有很多,各种运行命令、参数等也都有待学习和练习,比如如何管理数据、如何管理网络、如何互相配合工作、如何编写更专业的Dockerfile等。本文先入门为主,以后有时间再慢慢更新关于Docker的知识。

docker教程-1-学习及安装docker(代码片段)

目录1、Docker介绍1.1 Docker的来源1.2 Docker是什么1.3 Docker特点1.4 Docker的应用场景1.5 Docker的优势2、Docker版本及安装要求2.1Docker版本介绍2.2Docker安装要求3、Docker的核心概念3.1 Docker引擎3.2Docker的组成4、LinuxUbuntu 安装Docker4.1查看系... 查看详情

docker镜像overview

Docker镜像overview文章目录​​Docker镜像overview​​​​1.什么是Docker镜像?​​​​2.Docker镜像demo​​​​3.Docker容器与Docker镜像​​​​4.Docker镜像剖析​​1.什么是Docker镜像?​​Docker​​​镜像是用于在Docker​​容器​​中执... 查看详情

docker基础(代码片段)

目录Docker基础一docker容器介绍1.1docker的理念1.2docker的组成1.3docker能干什么1.4docker改变了什么1.5基于docker的不可变基础设施二Docker镜像和容器管理2.1相关站点2.2Docker部署与实践三Docker的网络访问和数据管理3.1Docker网络3.2Docker数据数... 查看详情

docker查询资料整理

Docker查询资料整理Docker官方文档Docker菜鸟教程Docker实战总结docker启动和关闭命令Docker官方文档官方文档Docker菜鸟教程Docker菜鸟教程Docker实战总结Docker实战总结(非常全面)docker启动和关闭命令 查看详情

重启docker命令(docker自动重启)

参考技术A1、怎样重启docker。2、重启docker容器命令。3、重启Docker。4、docker重启命令。1."重启docker的方法,为您提供重启docker的方法视频及对应图文信息,docker的重启方法有两种:第一使用systemctlrestartdocker重启docker服务,第... 查看详情

docker容器常用命令

Docker容器命令1.docker运行(创建)容器命令2.docker查看容器命令3.docker退出容器命令4.docker启动容器命令5.docker重启容器命令6.docker停止容器命令7.docker删除容器命令8.docker进入容器命令9.docker查看容器日志10.docker查看容器内运行的线程1... 查看详情

云原生|docker篇docker架构&中央仓库&安装

目录​​一、Docker架构​​​​1.1基本概念​​​​1.2Docker引擎​​​​二、Docker的中央仓库​​​​三、Docker安装​​​​四、Docker卸载​​Docker:Buildonce,Runanywhere!!!  一、Docker架构Docker使用客户端-服务器(C/S)架构模... 查看详情

docker项目部署(代码片段)

docker基本操作1.docker服务操作2.docker镜像操作3.docker容器操作4.docker安装mysql软件5.docker安装redis软件6.docker安装tomcat软件7.docker安装jdk1.81.docker服务操作启动docker服务sudoservicedockerstart查看docker状态sudoservicedockerstatus停止docker服 查看详情

初学docker容器(代码片段)

初学docker容器docker是什么docker与虚拟机的区别docker使用场景docker的原理docker三个统一和docker三大组件docker引擎docker-server配置文件docker的部署(20版)docker镜像操作docker是什么docker是一种轻量级的虚拟机在linux容器中运行应... 查看详情

docker01docker简介

一、docker简介Docker官网:http://www.docker.comGithubDocker源码:https://github.com/docker/docker1、docker是什么  Docker是一个开源的应用容器引擎,基于 Go语言 并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖... 查看详情

docker03docker基础知识docker实战(代码片段)

 1Docker基础知识  1.1什么是Docker    Docker是一个可以装应用的容器,就像杯子可以装水、书包可以装书一样;docker官网    Docker是Docker公司开发的,并开源到GitHub上;    Docker是跨平台的,支持windows、linux、Maco... 查看详情

Docker 容器网络与 Docker-in-Docker

】Docker容器网络与Docker-in-Docker【英文标题】:DockerContainerNetworkingwithDocker-in-Docker【发布时间】:2017-12-0311:33:09【问题描述】:我想通过docker-in-docker设置与父docker容器中的子docker容器建立网络。假设我正在尝试连接到一个简单的A... 查看详情

docker-docker架构详述

Docker架构Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。Docker面向对象容器对象镜像类 Docker镜像(Images)Docker镜... 查看详情

理解docker:docker网络

 本系列文章将介绍Docker的相关知识:(1)Docker安装及基本用法(2)Docker镜像(3)Docker容器的隔离性-使用Linuxnamespace隔离容器的运行环境(4)Docker容器的隔离性-使用cgroups限制容器使用的资源(5)Docker网络 1.Docker网络概... 查看详情

docker:docker组件

1Docker服务器与客户端Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTfulAPI。你... 查看详情

系统学习docker---第二节docker架构,原理,安装及简单应用

本小节主要内容:1.docker的架构2.docker安装步骤3.docker简单应用4.底层原理1.docker的架构  1.看官网,docker的架构描述: https://docs.docker.com/get-started/overview/Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进... 查看详情

docker快速入门——docker常用命令(代码片段)

Docker快速入门——Docker常用命令一、Docker命令简介1、Docker命令简介Docker的命令清单可以通过运行sudodocker或者sudodockerhelp命令查看。Docker容器技术在不断演化过程中,Docker的子命令已经达到41个,其中核心子命令(例如:run)还会... 查看详情

docker部署文档

Docker部署文档目录Docker部署文档1一、什么是Docker31.1Docker简介31.2对比传统虚拟机总结41.3Docker通常用于如下场景:51.4基本概念5Docker镜像5Docker容器6DockerRegistry7二、Docker原理9三、安装Docker93.1Centos系统要求93.2在安装前卸载旧的版本1... 查看详情