Maison  >  Article  >  Puisque Docker est restreint et inclus dans la « Liste d'entités », parlons de pourquoi Docker est si important ?

Puisque Docker est restreint et inclus dans la « Liste d'entités », parlons de pourquoi Docker est si important ?

青灯夜游
青灯夜游avant
2020-08-19 14:07:135364parcourir

Actualités :

Le 13 août, Docker a mis à jour son accord de service de site Web pour interdire aux organisations et aux individus des pays sous embargo et à ceux inclus dans la « liste d'entités » américaine d'utiliser le service Docker. site Web et tous les sites Web associés.

Il s'agit notamment de : Huawei, Hikvision, Dahua Technology, iFlytek, Megvii Technology, SenseTime et de nombreuses autres entreprises technologiques, ainsi que des universités telles que le Harbin Institute of Technology et la Harbin Engineering University.

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Dans cet article, nous explorerons le monde mystérieux de Docker, maîtriserons les principes de base et les opérations pratiques de Docker à partir de zéro et comprendrons pourquoi Docker est si important . [Recommandations associées : Tutoriel vidéo Docker]

À l'ère du Web riche, les applications deviennent de plus en plus puissantes, et en même temps, elles deviennent de plus en plus complexes. Le déploiement de clusters, l'environnement d'isolation, la publication en niveaux de gris et l'expansion dynamique sont tous indispensables, et la conteneurisation est devenue un pont intermédiaire nécessaire.

Raconter une histoire

Afin de mieux comprendre ce qu'est Docker, racontons d'abord une histoire :

Je Je J'avais besoin de construire une maison, alors j'ai déplacé des pierres, coupé du bois, dessiné des dessins et construit la maison. Après de nombreux travaux, la maison a finalement été construite.

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Du coup, après y avoir vécu un moment, j'ai soudain eu envie de déménager à la plage. A cette époque, selon la méthode précédente, je ne peux qu'aller à la plage, déplacer des pierres, couper du bois, dessiner des dessins et reconstruire une maison.

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Quand j'étais troublé, un magicien est venu et m'a appris une magie. Cette magie peut faire une copie de la maison que j'ai construite, en faire une « image miroir » et la mettre dans mon sac à dos.

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Quand j'arriverai à la plage, j'utiliserai ce "miroir" pour copier une maison et emménager.

N'est-ce pas incroyable ? Correspondant à notre projet, la maison est le projet lui-même, le miroir est la copie du projet et le sac à dos est l'entrepôt du miroir.

Si vous souhaitez augmenter dynamiquement la capacité, retirez simplement l'image du projet de l'entrepôt et copiez-la à votre guise. Construisez une fois, exécutez n'importe où !

Pas besoin de vous soucier de la version, de la compatibilité, du déploiement et d'autres problèmes, résolvant complètement l'embarras de « planter une fois en ligne et construire sans fin ».

Machines virtuelles et conteneurs

Avant de commencer, préparons quelques connaissances de base :

①Machine virtuelle : matériel de virtualisation

Machine virtuelle La machine virtuelle fait référence à un système informatique complet avec des fonctions matérielles complètes simulées par un logiciel et fonctionnant dans un environnement complètement isolé. Tout ce qui peut être fait sur un ordinateur physique peut l’être sur une machine virtuelle.

Lors de la création d'une machine virtuelle sur un ordinateur, vous devez utiliser une partie de la capacité du disque dur et de la mémoire de la machine physique comme capacité du disque dur et de la mémoire de la machine virtuelle.

Chaque machine virtuelle dispose d'un CMOS, d'un disque dur et d'un système d'exploitation indépendants, et la machine virtuelle peut être utilisée comme une machine physique. Avant la technologie des conteneurs, le plus grand influenceur du secteur était les machines virtuelles.

Les représentants de la technologie des machines virtuelles sont VMWare et OpenStack.

②Conteneur : virtualise la couche du système d'exploitation et est une unité logicielle standard

Ses caractéristiques sont les suivantes :

  • Exécuter n'importe où : les conteneurs peuvent regrouper le code avec des fichiers de configuration et des bibliothèques dépendantes associées pour garantir un fonctionnement cohérent dans n'importe quel environnement.

  • Utilisation élevée des ressources : les conteneurs assurent une isolation au niveau des processus, de sorte que l'utilisation du processeur et de la mémoire peut être définie de manière plus granulaire, permettant ainsi une meilleure utilisation des ressources informatiques du serveur.

  • Extension rapide : chaque conteneur peut s'exécuter comme un processus distinct et partager les ressources système du système d'exploitation sous-jacent, ce qui peut accélérer l'efficacité du démarrage et de l'arrêt du conteneur.

③Différences et connexions :

  • Bien qu'une machine virtuelle puisse isoler de nombreux "enfants" Ordinateur", mais prend plus de place et démarre plus lentement. Les logiciels de machine virtuelle peuvent également coûter de l'argent, comme VMWare.

  • La technologie des conteneurs n'a pas besoin de virtualiser l'intégralité du système d'exploitation, mais seulement de virtualiser un environnement à petite échelle, semblable à un "bac à sable".

  • Espace de fonctionnement, les machines virtuelles nécessitent généralement plusieurs Go à des dizaines de Go d'espace, tandis que les conteneurs ne nécessitent que des Mo, voire des Ko.

Jetons un coup d'œil aux données comparatives :

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Les machines virtuelles sont des technologies de virtualisation, et Docker c'est comme ça La technologie des conteneurs est une virtualisation légère.

Les conteneurs sont plus légers et plus rapides que les machines virtuelles car ils exploitent le système d'exploitation Linux sous-jacent pour s'exécuter dans un environnement isolé.

L'hyperviseur d'une machine virtuelle crée une limite très solide pour empêcher les applications de la violer, alors que la limite d'un conteneur n'est pas aussi forte.

Rencontrez Docker

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Docker est un moteur de conteneur d'applications open source qui permet aux développeurs de packager leurs applications Les packages d'applications et de dépendances sont placés dans un conteneur portable puis publiés sur n'importe quelle machine Linux populaire, qui peut également être virtualisée. Les conteneurs utilisent entièrement le mécanisme sandbox et n'ont aucune interface entre eux.

Les trois concepts fondamentaux de la technologie Docker sont :

  • Image miroir

  • Conteneur Conteneur

  • Référentiel d'entrepôt

Quelle est la raison pour laquelle Docker est léger ? Je pense que vous aurez également ce doute : pourquoi Docker démarre-t-il si rapidement ? Comment partager le noyau avec l'hôte ?

Lorsque nous demandons à Docker d'exécuter un conteneur, Docker configurera un environnement isolé par les ressources sur l'ordinateur.

Copiez ensuite l'application packagée et les fichiers associés dans le système de fichiers dans l'espace de noms. À ce stade, la configuration de l'environnement est terminée. Docker exécutera ensuite la commande que nous avons spécifiée à l'avance pour exécuter l'application.

L'image ne contient aucune donnée dynamique et son contenu ne sera pas modifié une fois construite.

Concepts de base

Les concepts de base sont les suivants :

  • Construire, expédier et exécuter (construction, transport, exploitation).

  • Construisez une fois, exécutez n'importe où.

  • Docker en lui-même n'est pas un conteneur, c'est un outil de création de conteneurs et un moteur de conteneur d'applications.

  • Les trois concepts fondamentaux de Docker sont : image, conteneur et référentiel.

  • La technologie Docker utilise le noyau Linux et ses fonctionnalités telles que les groupes C et les espaces de noms pour séparer les processus afin qu'ils puissent s'exécuter indépendamment les uns des autres.

  • Étant donné que les fonctionnalités Namespace et Cgroups ne sont disponibles que sous Linux, les conteneurs ne peuvent pas fonctionner sur d'autres systèmes d'exploitation. Alors, comment Docker fonctionne-t-il sur macOS ou Windows ? Docker utilise en fait une astuce et installe une machine virtuelle Linux sur un système d'exploitation non Linux, puis exécute le conteneur à l'intérieur de la machine virtuelle.

  • Une image est un package exécutable qui contient le code, le runtime, les bibliothèques, les variables d'environnement et les fichiers de configuration requis pour exécuter l'application. Le conteneur est l'instance d'exécution de l'image.

Pour plus d'informations sur les principes de Docker, vous pouvez consulter "Docker Working Principles and Containerization Simple Guide", qui ne sera pas décrit ici :

http:// dockone.io/article/8788

Installer Docker

①Installation en ligne de commande

Homebrew Cask prend déjà en charge Docker pour Mac, vous pouvez donc facilement utiliser Homebrew Cask pour installer, exécutez la commande suivante :

brew cask install docker

Pour plus de méthodes d'installation, veuillez consulter la documentation officielle :

https://www.docker.com/get-started

②Voir la version

La commande est la suivante :

docker -v

③Configurer l'accélération d'image

Définir la configuration d'écriture de Docker Engine :

{
  registry-mirrors: [
    http://hub-mirror.c.163.com/,
    https://registry.docker-cn.com
  ],
  insecure-registries:[],
  experimental: false,
  debug: true
}

④Installer la version de bureau

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

Le fonctionnement du bureau est très simple, allez d'abord sur le site officiel pour télécharger [1]. Grâce au bureau Docker, nous pouvons facilement opérer :

  • cloner : ​​cloner un projet.

  • build : image du package.

  • run : exécutez l'instance.

  • partager : partager l'image.

Bien, les préparatifs sont prêts, vous pouvez maintenant montrer vos compétences !

Démarrage rapide

Après avoir installé Docker, nous créons d'abord une image du projet réel et apprenons en l'utilisant.

①Nous devons d'abord avoir une compréhension générale des 11 commandes que nous utiliserons

Comme indiqué ci-dessous :

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

②Nouveau projet

Par souci de rapidité, nous utilisons directement l'échafaudage Vue pour construire le projet :

vue create docker-demo

Essayez de le démarrer :

yarn serve

Adresse d'accès : http://localhost:8080/. Le projet est prêt, nous empaquetons ensuite le projet :

yarn build

A ce moment, le Dist dans le répertoire du projet est la ressource statique que nous souhaitons déployer, et nous passons à l'étape suivante.

Remarque : les projets front-end sont généralement divisés en deux catégories, l'une est un déploiement statique utilisant directement Nginx et l'autre doit démarrer le service Node. Dans cette section, nous considérons uniquement le premier type. Concernant le service Node, je l'expliquerai en détail plus tard.

③新建 Dockerfile

命令如下:

cd docker-demo && touch Dockerfile

此时的项目目录如下:

.
├── Dockerfile
├── README.md
├── babel.config.js
├── dist
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock

可以看到我们已经在 docker-demo 目录下成功创建了 Dockerfile 文件。

④准备 Nginx 镜像

运行你的 Docker 桌面端,就会默认启动实例,我们在控制台拉取 Nginx 镜像:

docker pull nginx

控制台会出现如下信息:

Using default tag: latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete
8d69e59170f7: Pull complete
3f9f1ec1d262: Pull complete
d1f5ff4f210d: Pull complete
1e22bfa8652e: Pull complete
Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

如果你出现这样的异常,请确认 Docker 实例是否正常运行。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

镜像准备 OK,我们在根目录创建 Nginx 配置文件:

touch default.conf

写入:

server {
    listen       80;
    server_name  localhost;
    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

⑤配置镜像

打开 Dockerfile ,写入如下内容:

FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf

我们逐行解释一下代码:

  • FROM nginx 指定该镜像是基于 nginx:latest 镜像而构建的。

  • COPY dist/ /usr/share/nginx/html/ 命令的意思是将项目根目录下 dist 文件夹中的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下。

  • COPY default.conf /etc/nginx/conf.d/default.conf 将 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配置。

⑥构建镜像

Docker 通过 build 命令来构建镜像:

docker build -t jartto-docker-demo .

按照惯例,我们解释一下上述代码:

  • -t 参数给镜像命名 jartto-docker-demo。

  • . 是基于当前目录的 Dockerfile 来构建镜像。

执行成功后,将会输出:

Sending build context to Docker daemon  115.4MB
Step 1/3 : FROM nginx
 ---> 2622e6cca7eb
Step 2/3 : COPY dist/ /usr/share/nginx/html/
 ---> Using cache
 ---> 82b31f98dce6
Step 3/3 : COPY default.conf /etc/nginx/conf.d/default.conf
 ---> 7df6efaf9592
Successfully built 7df6efaf9592
Successfully tagged jartto-docker-demo:latest

镜像制作成功!我们来查看一下容器:

docker image ls | grep jartto-docker-demo

可以看到,我们打出了一个 133MB 的项目镜像:

jartto-docker-demo latest 7df6efaf9592 About a minute ago 133MB

镜像也有好坏之分,后续我们将介绍如何优化,这里可以先暂时忽略。

⑦运行容器

命令如下:

docker run -d -p 3000:80 --name docker-vue jartto-docker-demo

这里解释一下参数:

  • -d 设置容器在后台运行。

  • -p 表示端口映射,把本机的 3000 端口映射到 container 的 80 端口(这样外网就能通过本机的 3000 端口访问了。

  • --name 设置容器名 docker-vue。

  • jartto-docker-demo 是我们上面构建的镜像名字。

补充一点:在控制台,我们可以通过 docker ps 查看刚运行的 Container 的 ID:

docker ps -a

控制台会输出:

CONTAINER ID IMAGE              COMMAND                  CREATED       STATUS PORTS  NAMES
ab1375befb0b jartto-docker-demo /docker-entrypoint.…   8 minutes ago Up 7 minutes  0.0.0.0:3000->80/tcp  docker-vue

如果你使用桌面端,那么打开 Docker Dashboard 就可以看到容器列表了,如下图:

Puisque Docker est restreint et inclus dans la « Liste dentités », parlons de pourquoi Docker est si important ?

⑧访问项目

因为我们映射了本机 3000 端口,所以执行:

curl -v -i localhost:3000

或者打开浏览器,访问:localhost:3000。

⑨发布镜像

如果你想为社区贡献力量,那么需要将镜像发布,方便其他开发者使用。

发布镜像需要如下步骤:

  • 登陆 dockerhub[2],注册账号。

  • 命令行执行 docker login,之后输入我们的账号密码,进行登录。

  • 推送镜像之前,需要打一个 Tag,执行 docker tag /:

全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。

常规操作

到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。

①参数使用

FROM:

  • 指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令

  • FROM [AS ] 指定从一个镜像构建起一个新的镜像名字

  • FROM [:] [AS ] 指定镜像的版本 Tag

  • 示例:FROM mysql:5.0 AS database

MAINTAINER:

  • 镜像维护人的信息

  • MAINTAINER

  • 示例:MAINTAINER Jartto Jartto@qq.com

RUN:

  • 构建镜像时要执行的命令

  • RUN

  • 示例:RUN [executable, param1, param2]

ADD:

  • Ajoutez et copiez des fichiers locaux dans le conteneur, le package compressé sera décompressé, vous pourrez accéder aux fichiers sur le réseau et ils seront automatiquement téléchargés

  • ADD

  • Exemple : ADD *.js /app Ajouter des fichiers js au répertoire de l'application dans le conteneur

COPIER :

  • La fonction est la même que ADD, elle copie simplement et ne décompresse ni ne télécharge de fichiers

CMD :

  • La commande exécutée après le démarrage du conteneur est différente de RUN est la commande à exécuter lors de la construction de l'image

  • Lorsqu'il est utilisé Lorsque Docker Run exécute le conteneur, cela peut être remplacé sur la ligne de commande

  • Exemple : CMD [exécutable, param1, param2]

ENTRYPOINT :

  • est aussi une commande d'exécution, tout comme CMD, sauf que cette commande ne sera pas écrasée par la ligne de commande

  • ENTRYPOINT [exécutable, param1, param2]

  • Exemple : ENTRYPOINT [donnet, myapp.dll]

LABEL : Ajouter des métadonnées à l'image, sous forme de clé-valeur

  • LABEL = ;value> ...

  • Exemple : LABEL version=1.0 description=Ceci est une application Web

ENV : Définir l'environnement variables, certains conteneurs nécessiteront certaines variables d'environnement lors de l'exécution

  • ENV Définit une variable d'environnement à la fois

  • ENV = key = ENV JAVA_HOME /usr/java1.8/

  • EXPOSE : Port exposé au monde extérieur (le port du programme à l'intérieur du conteneur, bien qu'il soit le même que le hôte, est en fait deux ports)

EXPOSE

  • Exemple : EXPOSE 80

  • Lorsque le conteneur est en cours d'exécution, vous devez utiliser -p pour mapper le port externe pour accéder au port du conteneur dans

  • VOLUME : spécifie le répertoire pour les données persistance. La langue officielle est appelée mount

VOLUME /var /log spécifie le répertoire qui doit être monté dans le conteneur. Ce répertoire sera mappé à un répertoire aléatoire sur. l'hôte pour obtenir la persistance et la synchronisation des données

  • VOLUME [/var/ log,/var/test....] Spécifiez plusieurs répertoires dans le conteneur qui doivent être montés. sera mappé sur plusieurs répertoires aléatoires sur l'hôte pour obtenir la persistance et la synchronisation des données

  • VOLUME /var/data var/log spécifie que le répertoire var/log dans le conteneur est monté sur le /var/data répertoire sur l'hôte. Sous cette forme, le répertoire sur l'hôte peut être spécifié manuellement

  • WORKDIR : définissez le répertoire de travail. de RUN, CMD, COPY et ADD seront modifiés simultanément

WORKDIR

  • Exemple : WORKDIR /app /test

  • USER : Spécifiez l'utilisateur à utiliser lors de l'exécution de la commande, Par souci de sécurité et d'autorisations, sélectionnez différents utilisateurs en fonction de la commande à exécuter

UTILISATEUR :[]

  • Exemple : Test UTILISATEUR

  • ARG : définissez les paramètres à transmettre pour construire l'image

ARG [=]

  • ARG name=sss

  • Pour plus d'opérations, veuillez vous rendre dans la documentation officielle [3] :

https://docs.docker.com/


Bonnes pratiques

Après avoir maîtrisé les opérations régulières de Docker , nous pouvons facilement créer l’image du projet que nous souhaitons. Cependant, les images produites par différentes opérations sont également très différentes. Qu’est-ce qui cause exactement ces différences en miroir ? Autant continuer à explorer.

Voici les meilleures pratiques dans l'application de Docker. Veuillez essayer de suivre les directives suivantes :

Exiger clairement : quelle image est requise.

  • Rationalisation des étapes : les étapes comportant moins de changements sont prioritaires.

  • Version claire : L'image est nommée clairement.

  • Documentation : L'intégralité de l'étape de packaging de l'image peut être reproduite.

  • Résumé

La technologie de conteneurisation sera certainement l'une des compétences indispensables à l'ère du cloud, et Docker n'est que tomber dans l'océan. À cela s’ajoutent des technologies telles que la gestion des conteneurs de cluster Kubernetes, Service Mesh et Istio.

Ouvrez la porte de Docker, continuez à décoller les cocons, et approfondissez couche par couche, vous ressentirez le charme infini de la conteneurisation.

Liens connexes :

  • https://www.docker.com/products/docker-desktop

  • https://hub.docker.com/

  • https://docs.docker.com/

Adresse originale : http://jartto.wang/2020/07/04/learn-docker

Auteur : jartto

Pour en savoir plus sur les connaissances connexes, veuillez visiter : Tutoriel d'utilisation de Docker ! !

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer