Docker实用命令手册

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-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 "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.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 < ***.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的快速,即用即走的特性,用了就回不去了。

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Docker 是一款开源的容器化平台,可以轻松地创建、部署和管理应用程序的容器。下面是 Docker 常用命令手册的概述: 1. docker version:显示 Docker 版本信息。 2. docker info:显示 Docker 系统信息,包括容器、镜像和存储驱动等。 3. docker images:列出本地所有镜像。 4. docker pull [IMAGE_NAME[:TAG]]:从 Docker 仓库拉取镜像,默认为最新版本。 5. docker search [KEYWORD]:在 Docker 仓库中搜索关键字相关的镜像。 6. docker run [OPTIONS] [IMAGE_NAME[:TAG]] [COMMAND]:创建并运行一个新容器。 7. docker start [CONTAINER_NAME/CONTAINER_ID]:启动一个已存在的容器。 8. docker stop [CONTAINER_NAME/CONTAINER_ID]:停止一个正在运行的容器。 9. docker restart [CONTAINER_NAME/CONTAINER_ID]:重启一个容器。 10. docker rm [CONTAINER_NAME/CONTAINER_ID]:删除一个已停止的容器。 11. docker rmi [IMAGE_NAME/IMAGE_ID]:删除一个本地镜像。 12. docker ps [OPTIONS]:列出正在运行的容器。 13. docker logs [CONTAINER_NAME/CONTAINER_ID]:查看一个容器的日志。 14. docker exec [OPTIONS] [CONTAINER_NAME/CONTAINER_ID] [COMMAND]:在运行中的容器中执行命令。 15. docker commit [CONTAINER_NAME/CONTAINER_ID] [REPOSITORY[:TAG]]:将容器变为一个新的镜像。 这些是 Docker 中常用的基本命令。还有许多其他命令可以用来管理、监控和调试 Docker 容器和镜像。根据实际需求,可以进一步了解和使用这些命令来提高工作效率和便捷性。 ### 回答2: Docker是一种轻量级的容器化技术,可以快速构建、部署和管理应用程序。下面是一些常用的Docker命令: 1. docker run:运行一个容器。可以指定镜像名称、端口映射、卷挂载等参数来创建一个容器的实例。例如:docker run -p 8080:80 nginx。 2. docker ps:列出当前正在运行的容器。可以使用docker ps -a命令来查看所有的容器,包括已停止的。 3. docker images:列出本地的镜像。可以使用docker images -a命令来查看所有的镜像,包括中间层。 4. docker pull:从远程仓库中拉取一个镜像到本地。例如:docker pull ubuntu。 5. docker stop:停止一个正在运行的容器。可以使用容器ID或者容器名称来指定停止的容器。 6. docker rm:删除一个已经停止的容器。可以使用容器ID或者容器名称来指定要删除的容器。 7. docker rmi:删除一个本地的镜像。可以使用镜像ID或者镜像名称来指定要删除的镜像。 8. docker exec:在一个正在运行的容器中执行命令。例如:docker exec -it <容器ID> /bin/bash。 9. docker build:利用Dockerfile来构建一个镜像。例如:docker build -t myimage:1.0 . 10. docker push:将一个本地的镜像推送到远程仓库。例如:docker push myimage:1.0。 这只是一些常用的Docker命令,还有很多其他有用的命令和参数可以用来创建、管理和监控容器。熟练掌握这些命令可以更好地使用Docker进行应用程序的开发和部署。 ### 回答3: Docker是一个开源的容器化平台,可以将应用程序和其依赖项打包成一个轻量级、可移植的容器,方便在不同的环境中进行部署和运行。以下是Docker常用命令的简要手册: 1. docker run:创建并启动一个新的容器。可以指定容器的名称、镜像和其他选项,如端口映射、数据卷等。 2. docker stop:停止一个运行中的容器。可以指定容器名称或容器ID来停止指定的容器。 3. docker rm:删除一个已经停止的容器。可以指定容器名称或容器ID来删除指定的容器。 4. docker ps:列出当前运行中的容器。使用选项 -a 可以列出所有的容器,包括已停止的。 5. docker images:列出本地的镜像。使用选项 -a 可以列出全部的镜像,包括中间层镜像。 6. docker pull:从Docker仓库中下载一个镜像。 7. docker push:将一个本地的镜像推送到Docker仓库。 8. docker build:使用Dockerfile构建一个镜像。 9. docker exec:在运行中的容器中执行命令。 10. docker logs:查看容器的日志输出。 11. docker network:管理Docker的网络资源。 12. docker volume:管理Docker的数据卷。 13. docker-compose:通过一个YAML文件定义和管理多个容器的组合(服务)。 这只是Docker常用命令的简要手册Docker拥有更多的功能和命令,可以根据具体需求进行深入学习和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值