Docker实用命令手册

您所在的位置:网站首页 docker怎么用的 Docker实用命令手册

Docker实用命令手册

#Docker实用命令手册| 来源: 网络整理| 查看: 265

Docker实用命令手册

大家好,我是比特桃。本文汇总了超实用的Docker命令手册,本文适用于有一定Docker基础的同学。如果你对Docker不了解,可能无法直接使用这些命令。但别担心,Docker本身是一个工具,如果只是用起来其实并不需要花多少时间。可以进入这里进行学习:Docker从入门到实践。

1、安装

Docker命令的使用其实不区份操作系统,唯一需要注意的是Windows没有sudo命令,另外就是在卷的映射上选择宿主机可以认识的路径。安装方面,在主流的操作系统Linux、Mac OS、Windows中,Linux是性能最佳的。因为Docker可以直接复用宿主机的Linux内核,可以直接从官网安装Docker Engine。Windows和Mac则只能安装Docker Desktop,这个软件是可视化的。Windows可以配置一下,让它内部使用自带的WSL内核,建议配置一下以提升效率。不然其实Docker会在本机跑一个虚拟的Linux系统来去支撑Docker。而Dockers Compose在Mac和Windows中是自带的,但Linux中需要单独下载配置一下。

2、命令形式

我们通常使用的Docker命令形式有三种,并且这三种形式可以相互转换:

命令行 这种和普通敲入其他的命令是一样的,都需要手动敲入,如下图所示: 在这里插入图片描述有的命令行可能很长,我们可以用 \ 分隔符进行分割,从而视觉可以看的更清晰。在这里插入图片描述 这种形式可以直接敲入,然后回车就可以执行。

Dockerfile 需要手写Dockerfile文件,格式如下:

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

执行docker build -t ***:1.0 . 就可以将该文件编译成本机的镜像,然后再运行就可以了。

DockerCompose Compose 是用于定义和运行多容器 Docker 应用程序的工具,它用处比较多的是编写一个应用所需的容器编排。通常以docker-compose.yml命名,格式如下:

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

Docker Compose中常用docker-compose up -d 后台启动,docker-compose down 关闭容器并删除镜像。需要注意的是,DockerCompose中的镜像只会在第一次使用的时候构建,如果后续修改想增量式更新,需要用下面的命令:

docker-compose build docker-compose up --build 3、常用命令行 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

如果想把配置文件映射出来,则需要事先手动创建Mysql的配置文件,/opt/docker/mysql/conf配置文件my.cnf如下所示: 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

用宿主机的配置文件直接映射过去,可能会导致安全问题并不能生效。如果提示的话可以进入容器执行如下命令:

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、Minio 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 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、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、编译及启动 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 5.1、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、奇技绝巧

如遇没有权限:

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

查看日志

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

备份导出导入

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

Docker 其实只是一个工具而已,就像Vmware虚拟机一样,虽然他俩原理不一样。但站在使用角度来说,并没有太多区别,无非就是Docker基本都是命令行形式。由于Docker的快速,即用即走的特性,用了就回不去了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3