Manuel de commande pratique Docker

Manuel de commande pratique Docker

Bonjour à tous, je suis Bittao. Cet article résume le manuel super pratique des commandes Docker.Cet article est adapté aux étudiants qui ont une certaine base Docker. Si vous n'êtes pas familier avec Docker, vous ne pourrez peut-être pas utiliser ces commandes directement. Mais ne vous inquiétez pas, Docker lui-même est un outil, et cela ne prend pas beaucoup de temps si vous l'utilisez simplement. Vous pouvez entrer ici pour apprendre : Docker de l'entrée à la pratique .

1. Mise en place

L'utilisation des commandes Docker ne fait pas de distinction entre les systèmes d'exploitation.La seule chose à noter est que Windows n'a pas sudode commandes, et l'autre est de sélectionner un chemin que l'hôte peut reconnaître sur le mappage de volume. En termes d'installation, parmi les systèmes d'exploitation grand public Linux, Mac OS et Windows, Linux a les meilleures performances. Étant donné que Docker peut directement réutiliser le noyau Linux de la machine hôte, vous pouvez installer Docker Engine directement à partir du site Web officiel. Windows et Mac ne peuvent installer que Docker Desktop, qui est visuel. Windows peut être configuré pour utiliser son propre noyau WSL en interne. Il est recommandé de le configurer pour améliorer l'efficacité. Sinon, Docker exécutera un système Linux virtuel localement pour prendre en charge Docker. Dockers Compose est livré avec Mac et Windows, mais il doit être téléchargé et configuré séparément sous Linux.

2. Formulaire de commande

Il existe trois formes de commandes Docker que nous utilisons habituellement, et ces trois formes peuvent être converties entre elles :

  1. Ligne de commande
    C'est la même chose que de taper d'autres commandes, toutes doivent être tapées manuellement, comme le montre la figure ci-dessous :
    insérez la description de l'image iciCertaines lignes de commande peuvent être très longues, nous pouvons utiliser \des séparateurs pour les diviser, afin que le visuel puisse être vu plus clairement . insérez la description de l'image ici
    Ce formulaire peut être saisi directement, puis appuyez sur Entrée pour l'exécuter.

  2. Dockerfile
    nécessite un fichier Dockerfile manuscrit au format suivant :

    FROM anapsix/alpine-java
    ARG APP_NAME
    ENV APP_NAME=${APP_NAME}
    ADD ./flow-eda-${APP_NAME}-0.0.1-SNAPSHOT.jar ./flow-eda-${APP_NAME}.jar
    ARG APP_PORT
    EXPOSE ${APP_PORT}
    ENTRYPOINT java -jar flow-eda-${APP_NAME}.jar
    

    Exécutez docker build -t ***:1.0 .pour compiler le fichier dans l'image de la machine, puis exécutez-le.

  3. DockerCompose
    Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Il est plus utile d'écrire l'arrangement des conteneurs requis pour une application. Habituellement docker-compose.ymlnommé d'après, le format est le suivant :

    version: '3'
    	services:
    	  elasticsearch:
    	    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2-amd64
    	    container_name: "elasticsearch"
    	    ports:
    	      - 9200:9200
    	      - 9300:9300
    	    environment:
    	      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    	      - cluster.name=tommy-es
    	      - bootstrap.memory_lock=true
    	      - discovery.type=single-node
    	    volumes:
    	      - D:/note-data/es-data:/usr/share/elasticsearch/data
    	
    	  kibana:
    	    image: docker.elastic.co/kibana/kibana:7.9.2
    	    container_name: kibana
    	    depends_on:
    	      - elasticsearch
    	    ports:
    	      - 5601:5601
    

    Couramment utilisé dans Docker Compose docker-compose up -dpour démarrer en arrière-plan, docker-compose downfermer le conteneur et supprimer l'image. Il convient de noter que l'image dans DockerCompose ne sera construite que lors de sa première utilisation. Si vous souhaitez effectuer une mise à jour incrémentielle pour les modifications ultérieures, vous devez utiliser la commande suivante :

    docker-compose build
    docker-compose up --build
    

3. Lignes de commande couramment utilisées

3.1、MySQL

# Mysql 8
docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e YSQL_ROOT_HOST:=% mysql
# Mysql 5.7
docker run -p 3307:3306 --name mysql -v /opt/docker/mysql/log:/var/log/mysql -v /opt/docker/mysql/data:/var/lib/mysql -v /opt/docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Si vous souhaitez mapper le fichier de configuration, vous devez créer manuellement le fichier de configuration Mysql à l'avance, /opt/docker/mysql/confle fichier de configuration my.cnfest le suivant :
Mysql 8

[mysqld]
#datadir=/usr/local/mysql/data
default_authentication_plugin=mysql_native_password  #使用mysql8以前的密码插件,以便navicat等工具能够正常连接
default-storage-engine=INNODB
character_set_server = utf8
secure_file_priv=/var/lib/mysql
[mysqld_safe]
character_set_server = utf8
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[client]
default-character-set = utf8

MySQL 5.7

[mysqld]
character-set-server=utf8
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

Le mappage direct avec le fichier de configuration de la machine hôte peut entraîner des problèmes de sécurité et peut ne pas prendre effet. Si vous y êtes invité, entrez le conteneur et exécutez la commande suivante :

chmod 644 /etc/my.cnf
# 设置编码格式
show variables like 'character_set_%';
set character_set_server=utf8;

3.2、Redis

# 简洁版
docker run -d --name redis -p 6379:6379 redis:latest redis-server --appendonly yes
# 细化配置
docker run -d --privileged=true --restart always --name redis -p 6379:6379 -v /opt/docker/redis/data:/data redis --requirepass 123456 --appendonly yes

3.3、Rabbitmq

docker run -d --privileged=true --restart=always --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 -v /d/Docker/Rabbitmq/data:/var/lib/rabbitmq  -v /d/Docker/Rabbitmq/log/:/var/log/rabbitmq/log/ rabbitmq:management

3.4、Nacos

docker run -d --privileged=true --restart=always  --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 --env MODE=standalone nacos/nacos-server
docker run -d --privileged=true  --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 --env MODE=standalone  -v D:\docker\nacos\logs:/home/nacos/logs -v D:\docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacose:v1

3.5、Nginx

# 生成容器
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/docker/nginx/conf/conf.d
# 删除掉这个用来拿配置文件的容器
docker rm nginx
# 重新开启一个
docker run -d --privileged=true --restart=always -p 9001:80 --name nginx -v /root/web/html:/usr/share/nginx/html -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/docker/nginx/log:/var/log/nginx nginx

3.6、Minimum

docker run  -p 9090:9090  -p 9091:9091 --name minio \
 -d --restart=always \
 -e "MINIO_ROOT_USER=admin" \
 -e "[email protected]" \
 -v /data/oss/jun/data:/data \
 -v /data/oss/jun/config:/root/.minio \
  minio/minio server /data  --console-address ":9090"  --address ":9091"

3.7、Gitlab

sudo docker run --detach --publish 8930:443 --publish 8929:8929 --publish 8928:22 --name gitlab --restart always --volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab --shm-size 256m registry.gitlab.cn/omnibus/gitlab-jh:latest

3.8, Nexus

docker run -d --name nexus3 --restart=always -p 8081:8081 --mount src=nexus-data,target=/nexus-data sonatype/nexus3

3.9、Jenkins

docker run -d -u root -p 8888:8080 -v /opt/docker/jenkins-data:/var/jenkins_home -v /opt/docker.sock:/var/run/docker.sock -v "$HOME":/home --privileged=true --restart=always --name jendemo jenkinsci/blueocean

3.10、Mariadb

docker run -d -p 3306:3309 --name mariadb -v /opt/mariadb/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mariadb:latest
mysql -h 127.0.0.1:3309 -u root -p root

3.11、xxl-job

docker run \ 
-e PARAMS="--spring.datasource.url=jdbc:mysql://172.17.0.3:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456" \
-p 28080:8080 \
--name xxl-job-admin \
-d xuxueli/xxl-job-admin:2.3.1

4. DockerFile couramment utilisé

4.1、MySQL

FROM mysql/mysql-server:8.0.30

ENV TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY ./glmx.sql /docker-entrypoint-initdb.d

4.2. Application Java

# 环境
FROM glmx-base

RUN mkdir -p /root/glmx

WORKDIR /root/glmx
# 拷贝jar
COPY glmx /root/glmx
# 设置暴露的端口号
EXPOSE 24081

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx1024m -Djava.ext.dirs=lib"

# 执行命令
CMD java -Xms512m -Xmx1024m -Djava.ext.dirs=lib -jar gfpt-gfpt-1.0-SNAPSHOT.jar

4.3, compiler et démarrer

docker build -t  demo-app:1.0  .

sudo docker run -d -p 24081:24081 --name demo-app \
--privileged=true --restart always  \
-v /home/administrator/demo/app:/root/demo\
demo-app

5. Docker Compose couramment utilisé

5.1. Projet Spring Boot

version: "3.8"

services:
    mysql:
        build:
            context: ./db
        container_name: glmx-mysql
        ports: 
            - "6001:3306"
        environment:
            MYSQL_ROOT_HOST: "%"
            MYSQL_ROOT_PASSWORD: 123456
        networks:
            - glnet
        restart: always
        privileged: true

    redis:
        image: glmx-redis
        container_name: glmx-redis
        ports:
            - "6002:6379"
        command: ["redis-server","--requirepass 123456","--appendonly yes"]
        networks:
            - glnet
        restart: always
        privileged: true

    rabbitmq:
        image: glmx-rabbitmq
        container_name: glmx-rabbitmq
        ports:
            - 6003:5672
            - 6004:15672
        networks:
            - glnet
        restart: always
        privileged: true
    

    nacos:
        image: glmx-nacos
        container_name: nacos-nacos
        environment: 
            - MODE=standalone
        ports: 
            - "6005:8848"
        networks:
            - glnet
        restart: always
        privileged: true

    nginx:
        image: glmx-nginx
        container_name: glmx-nginx
        ports:
            - "80:80"
            - "8080:8080"
            - "8081:8081"
            - "6868:6868"
        volumes:
            - "D:/Docker/glmx/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf"
            - "D:/Docker/glmx/nginx/www:/usr/share/nginx/html"
            - "D:/Docker/glmx/nginx/log:/var/log/nginx"
        networks:
            - glnet
        restart: always
        privileged: true

    app:
        image: glmx-app
        container_name: glmx-app
        ports:
            - "24081:24081"
        volumes:
            - "D:/Docker/glmx/app:/root/glmx"
        networks:
            - glnet
        links:
            - mysql
            - redis
            - rabbitmq
            - nacos
        depends_on:
            - mysql
            - redis
            - rabbitmq
            - nacos
            - nginx
        restart: always
        privileged: true

networks:
    glnet:
        driver: bridge

6. Des compétences merveilleuses

En cas de non autorisation :

# 没有权限
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker

afficher le journal

# 查看***容器的日志
docker logs --tail=1000 ***
# 实时查看更新
docker logs -f ***
# 日志保存位置
/var/lib/docker/containers/容器ID/容器ID-json.log
# 避免Ctrl + c 退出此容器
docker attach --sign-proxy=false ***

sauvegarde exportation importation

# 重命名Docker容器的tag名称,***代表现有名字,###代表新名字
docker tag *** ### 
# 保存***容器到###.tar中,***容器后面可以跟多个容器
docker save -o ###.tar ***1 ***2
# 恢复容器
docker load --input ***.tar  或者  docker load < ***.tar

Installer Docker Compose

【DockerCompose】
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
  • -net=hôte

Uniquement disponible sur Linux, non disponible sur Mac et Windows en raison de problèmes avec l'implémentation réseau de Docker.

  • hôte.docker.interne

Cette commande peut représenter l'hôte, mais si le mappage du nom de domaine des hôtes est utilisé dans DockerCompose

extra_hosts:
            - "host.docker.internal:host-gateway"

Afficher la configuration liée à Docker

docker inspect {
    
    CONTAINER ID}
docker netowrk inspect {
    
    NETWORK ID}

7. Conclusion

Docker n'est en fait qu'un outil, tout comme une machine virtuelle Vmware, bien que leurs principes soient différents. Mais du point de vue de l'utilisation, il n'y a pas beaucoup de différence, rien de plus que Docker est essentiellement sous la forme de ligne de commande. En raison de la nature rapide et prête à l'emploi de Docker, une fois que vous l'utilisez, vous ne pouvez plus revenir en arrière.

Je suppose que tu aimes

Origine blog.csdn.net/u012558210/article/details/129124044
conseillé
Classement