Docker实用命令手册

news/2024/5/2 18:09:29/文章来源:https://blog.csdn.net/u012558210/article/details/129124044

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命令形式有三种,并且这三种形式可以相互转换:

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

  2. 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 . 就可以将该文件编译成本机的镜像,然后再运行就可以了。

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

    version: '3'services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2-amd64container_name: "elasticsearch"ports:- 9200:9200- 9300:9300environment:- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- cluster.name=tommy-es- bootstrap.memory_lock=true- discovery.type=single-nodevolumes:- D:/note-data/es-data:/usr/share/elasticsearch/datakibana:image: docker.elastic.co/kibana/kibana:7.9.2container_name: kibanadepends_on:- elasticsearchports:- 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 "MINIO_ROOT_PASSWORD=admin@123.com" \-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.30ENV TZ=Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneCOPY ./glmx.sql /docker-entrypoint-initdb.d

4.2、Java应用

# 环境
FROM glmx-baseRUN mkdir -p /root/glmxWORKDIR /root/glmx
# 拷贝jar
COPY glmx /root/glmx
# 设置暴露的端口号
EXPOSE 24081ENV 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: ./dbcontainer_name: glmx-mysqlports: - "6001:3306"environment:MYSQL_ROOT_HOST: "%"MYSQL_ROOT_PASSWORD: 123456networks:- glnetrestart: alwaysprivileged: trueredis:image: glmx-rediscontainer_name: glmx-redisports:- "6002:6379"command: ["redis-server","--requirepass 123456","--appendonly yes"]networks:- glnetrestart: alwaysprivileged: truerabbitmq:image: glmx-rabbitmqcontainer_name: glmx-rabbitmqports:- 6003:5672- 6004:15672networks:- glnetrestart: alwaysprivileged: truenacos:image: glmx-nacoscontainer_name: nacos-nacosenvironment: - MODE=standaloneports: - "6005:8848"networks:- glnetrestart: alwaysprivileged: truenginx:image: glmx-nginxcontainer_name: glmx-nginxports:- "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:- glnetrestart: alwaysprivileged: trueapp:image: glmx-appcontainer_name: glmx-appports:- "24081:24081"volumes:- "D:/Docker/glmx/app:/root/glmx"networks:- glnetlinks:- mysql- redis- rabbitmq- nacosdepends_on:- mysql- redis- rabbitmq- nacos- nginxrestart: alwaysprivileged: truenetworks: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 < ***.tar

安装DockerCompose

【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=host

只有在Linux上可用,在 Mac 和 Windows 中因为 Docker 网络实现方面的问题,是不可用的。

  • host.docker.internal

这条命令可以代表宿主机,但如果在DockerCompose中使用hosts域名映射

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

查看Docker相关配置

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

7、结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71535.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法专题训练营

动归算法专题 1.拆分词句 是不是,在不在都是可以用动归解决的 状态转义方程不一定都是等式,也有可能是条件 2.三角形 动归算法也不是一定要借助新开空间,也是可以用自己原来的空间 3.背包问题 4.分割回文串-ii 5.不同的子序列 贪心算法专题 只管一步的最优结果, 1.分割平衡…

高并发系统设计之负载均衡

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录DNS负载均衡Nginx负载均衡负载均衡算法负载均衡配置超时配置被动健康检查与主动健康检查LVS/F5Nginx当我们的应用单实例不能支撑用户请求时&#xff0c;此时就需要扩容&#xff0c;从一台服务器扩容到…

Navicat Premium 安装 注册

Navicat Premium 一.Navicat Premium的安装 1.暂时关闭windows的病毒与威胁防护弄完再开&#xff0c;之后安装打开过程中弹窗所有警告全部允许,不然会被拦住 2.下载安装包&#xff0c;解压 链接&#xff1a;https://pan.baidu.com/s/1X24VPC4xq586YdsnasE5JA?pwdu4vi 提取码…

论文阅读 | Real-Time Intermediate Flow Estimation for Video Frame Interpolation

前言&#xff1a;ECCV2022 快速插帧方法 Real-Time Intermediate Flow Estimation for Video Frame Interpolation 引言 进行视频插帧目前比较常见的方法是基于光流法&#xff0c;分为两个步骤&#xff1a;1.通过光流对齐输入帧&#xff0c;融合对齐的帧 光流并不能直接同于…

epoll 笔记

maxevents 参数大小一般不超过64必须够了 maxevents 个事件&#xff0c;才会传到用户空间吗&#xff1f;可见&#xff0c;只要有事件就可以传到用户空间。一台服务器可以支撑多少个链接https://blog.csdn.net/mijichui2153/article/details/81331345 0、两台虚拟机的初始状态如…

亮个相吧小宝贝儿,五款压箱底的软件

今天要给大家推荐5款压箱底的宝贝软件了&#xff0c;百度搜索一下就能找到下载链接了。 1.开源浏览器——Firefox Firefox是一个自由的&#xff0c;开放源码的浏览器&#xff0c;适用于 Windows, Linux 和 MacOS X平台&#xff0c;Mozilla Firefox官方版体积小速度快&#xf…

rocketmq延时消息自定义配置

概述 使用的是开源版本的rocketmq4.9.4 rocketmq也是支持延时消息的。 rocketmq一般是4个部分&#xff1a; nameserver&#xff1a;保存路由信息broker&#xff1a;保存消息生产者&#xff1a;生产消息消费者&#xff1a;消费消息 延时消息的处理是在其中的broker中。 但是…

堆球问题,开普勒猜想(格密码相关)

目录 一. 介绍 二. 历史进展分析 三.2维下的堆球问题 四. 3维下的堆球问题 五. 8维与24维下的堆球问题 总结 一. 介绍 堆球问题又叫堆球理论、最密堆积、球填充&#xff0c;英文为The Theory Of Sphere Packings。 堆球问题的本质就是填充一堆大小相同的球。要求这些球…

公会发展计划(GAP)第三季

继前两季发布的公会发展计划取得成功之后&#xff0c;Yield Guild Games 现在推出了第三季的公会发展计划&#xff08;GAP&#xff09;。GAP 在第二季有了显著的增长&#xff0c;有超过 3000 个成就 NFT 被铸造。GAP 是以成就为导向的社区代币分配协议&#xff0c;下一次迭代将…

pmp考试是什么?适合哪些人学?含金量?(含pmp资料)

先说一下我这个人的理解&#xff0c;PMP就是提高项目管理理论基础和实践能力的考试。 再说说PMP官方一点的说明&#xff1a; PMP证书全称为Project Management Professional&#xff0c;也叫项目管理专业人士资格认证。PMP证书由美国项目管理协会(PMI)发起&#xff0c;是严格…

美国原装二手keysight E4980A(安捷伦)2MHZ LCR表

Agilent E4980A、Keysight E4980A、LCR 表&#xff0c;20 Hz - 2 MHz E4980A 是 Agilent 的 2 MHz LCR 表。LCR表是一种电子测试设备&#xff0c;用于测量电子元件的电感&#xff08;L&#xff09;、电容&#xff08;C&#xff09;和电阻&#xff08;R&#xff09;。LCR 表可…

关于在VM上的windows server 2022系统安装

目录 1、windows serer 2022安装的准备工作 1&#xff09;下载系统 2&#xff09;寻找对应系统密钥 3&#xff09;配置server系统开机配置项&#xff08;可能会出现sconfig配置界面&#xff09; 2、开始安装server系统 1、windows serer 2022安装的准备工作 1&#xff09;…

【离散数学】1. 数理逻辑

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学&#xff1a;研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑&#xff1a;研究推理的科学 数学方法&#xff1a;引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学&#xff0c;即使用符号化…

「可信计算」与软件行为学

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

实验室设计|实验室设计要点SICOLAB

一、实验室设计规划要素1、实验室布局&#xff1a;实验室的布局要符合实验室工作流程&#xff0c;可以将实验室划分为干净区和污染区&#xff0c;以确保实验室的卫生和实验的准确性。2、设备选购&#xff1a;根据实验需要选择适当的设备&#xff0c;并确保设备的质量和性能符合…

Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记

文章目录1.启动流程1.1 最先进入的文件&#xff1a;head_s.S1.2 start_kernel()函数所在的文件&#xff1a;init.c1.3 input_init()函数所在文件&#xff1a;sys_input.c1.4 INPUT_LKeyDevInit()所在文件&#xff1a;keyboarddev.c1.5 esINPUT_RegLdev()所在文件&#xff1a;in…

【LeetCode】剑指 Offer 09. 用两个栈实现队列 p68 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/ 1. 题目介绍&#xff08;09. 用两个栈实现队列&#xff09; 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别…

如何运行YOLOv6的代码实现目标识别?

YOLOv6是由美团视觉团队开发的1.环境配置我们先把YOLOv6的代码clone下来git clone https://github.com/meituan/YOLOv6.git安装一些必要的包pip install pycocotools2.0作者要求pytorch的版本是1.8.0,我的环境是1.7.0&#xff0c;也是可以正常运行的pip install -r requirement…

【机器学习】决策树-C4.5算法

1.C4.5算法 C4.5算法与ID3相似&#xff0c;在ID3的基础上进行了改进&#xff0c;采用信息增益比来选择属性。ID3选择属性用的是子树的信息增益&#xff0c;ID3使用的是熵&#xff08;entropy&#xff0c; 熵是一种不纯度度量准则&#xff09;&#xff0c;也就是熵的变化值&…

Kaldi语音识别技术(六) ----- DTW和HMM-GMM

Kaldi语音识别技术(六) ----- DTW和HMM-GMM 文章目录Kaldi语音识别技术(六) ----- DTW和HMM-GMM前言一、语音识别概况二、语音识别基本原理三、DTW&#xff08;动态时间弯折&#xff09;算法四、GMM-HMM前言 前面的内容中我们完成了特征的提取,那么本章节我们主要进行理论部分…