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.
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.
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.
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.
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 :
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
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
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 :
②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 就可以看到容器列表了,如下图:
⑧访问项目
因为我们映射了本机 3000 端口,所以执行:
curl -v -i localhost:3000
或者打开浏览器,访问:localhost:3000。
⑨发布镜像
如果你想为社区贡献力量,那么需要将镜像发布,方便其他开发者使用。
发布镜像需要如下步骤:
登陆 dockerhub[2],注册账号。
命令行执行 docker login,之后输入我们的账号密码,进行登录。
推送镜像之前,需要打一个 Tag,执行 docker tag
全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。
常规操作
到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。
①参数使用
FROM:
指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM
FROM
示例: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
ENTRYPOINT :
LABEL : Ajouter des métadonnées à l'image, sous forme de clé-valeur
ENV : Définir l'environnement variables, certains conteneurs nécessiteront certaines variables d'environnement lors de l'exécution
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
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
WORKDIR : définissez le répertoire de travail. de RUN, CMD, COPY et ADD seront modifiés simultanément
WORKDIR
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
ARG : définissez les paramètres à transmettre pour construire l'image
ARG
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.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 ! !