docker入门级命令

基本概念

docker的连个基本概念:镜像、容器。

docker镜像可以理解为是存储docker安装包的地方,比如:mcr.microsoft.com/mssql/server:2017-latest是sqlserver的docker镜像。

可以通过docker pull命令拉取远程镜像到本地。比如:

docker pull mysql:latest

命令docker images可以查看到拉取到本地的docker镜像:

[root@localhost ~]# docker images
REPOSITORY                       TAG           IMAGE ID       CREATED         SIZE
nginx                            latest        92b11f67642b   2 months ago    187MB
redis                            latest        170a1e90f843   3 months ago    138MB
mcr.microsoft.com/mssql/server   2017-latest   19d34f261156   8 months ago    1.33GB
openjdk                          8             b273004037cc   21 months ago   526MB
[root@localhost ~]# 

容器是镜像安装后的实例,比如通过sqlserver镜像可以在docker容器运行mysql:

docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

之后可以通过命令检查docker ps检查docker实例:

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED       STATUS       PORTS                                                                                                                             NAMES
e42b51b7bd90   redis                                        "docker-entrypoint.s…"   3 weeks ago   Up 3 weeks   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                         redis
960a53760612   minio/minio                                  "/usr/bin/docker-ent…"   5 weeks ago   Up 4 weeks   0.0.0.0:9001->9001/tcp, :::9001->9001/tcp, 0.0.0.0:9002->9000/tcp, :::9002->9000/tcp                                              minio
11bf3386b072   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/nonr…"   5 weeks ago   Up 4 weeks   0.0.0.0:135->135/tcp, :::135->135/tcp, 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp, 0.0.0.0:51000->51000/tcp, :::51000->51000/tcp   sqlserver2017

docker-compose.yml

通过docker run命令运行docker容器需要指定容器运行参数,因此docker run命令参数繁多,比较繁琐。

docker-compose.yml文件可以很好的解决每次通过docker run命令运行容器需要记住n多参数的繁琐。可以将容器运行时的参数都编排到docker-compose.yml、以及Dockerfile文件中,运行容器的命令就会变的非常简单:

# 运行容器
docker start  [容器id或容器名称]
docker stop  [容器id或容器名称]
docker restart  [容器id或容器名称]

比如:

version: '3'
services:
  #服务名称
  mssql:
    #容器名称
    container_name: sqlserver2017
    #镜像名称
    image: mcr.microsoft.com/mssql/server:2017-latest
    #总是重启后启动
    restart: always
    #端口映射
    ports:
      - 11433:1433
      - 135:135
      - 51000:51000
    #挂载
    volumes:
      - "/home/docker/sqlserver2017:/var/opt/mssql"
      - "/etc/localtime:/etc/localtime"
    #环境变量
    environment:
      - TZ=Asia/Shanghai
      #接受最终用户许可协议
      - ACCEPT_EULA=Y
      - MSSQL_RPC_PORT=135
      - MSSQL_DTC_TCP_PORT=51000
      #SA用户密码
      - SA_PASSWORD=password@kdf

也可以启动自己的springboot应用:

myApplication:
    build:
      context: ./springbootApp
      dockerfile: Dockerfile
    restart: always
    container_name: myApplication
    ports:
      - 9801:9801
    logging:
      options:
        max-size: 10mb

在当前路径下需要存在springbootApp目录,该目录下包含指定的Dockerfile文件:

FROM openjdk:8

#

MAINTAINER zhangfu<zhangfu@gmail.com>

#  ޸     ʱ
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

VOLUME /tmp
RUN mkdir -p /my-app
WORKDIR /my-app
EXPOSE 9801

# 指定jar文件

ADD jeecg-boot.jar jeecg-boot.jar
ENV PARAMS=""

ENTRYPOINT ["java","-jar"," jeecg-boot.jar"]

之后,就可以在docker-compose.yml文件所在的目录启动应用:

docker start myApplication

所以可以理解为:有两种方式启动docker实例,一种是通过docker镜像,一种是通过build的方式:利用context指定路径下的dockfile文件启动容器。

容器服务端口

容器实例化的过程中会指定两个端口:

宿主机端口:容器内服务端口。

宿主机端口是我们访问服务的端口,因为我们肯定是通过宿主机访问容器服务的,所以启动多个服务的时候需要注意宿主机端口冲突。

容器内服务端口是容器内启动的服务的端口,这个时候需要特别注意的是我们启动在容器内的服务的端口,往往是通过配置文件指定的,一定要和我们启动容器的compose命令(或者通过docker run)指定的端口一致。

比如我们要通过容器启动redis服务,一般来讲是在confi文件中指定redis服务的端口号,比如在docker-compose.yml文件中:

 redis:
    image: redis
    restart: always
    hostname: redis
    container_name: redis
    privileged: true
    ports:
      - 6379:6379
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/etc/redis/redis.conf
      - ./redis/logs:/logs
    command: ["redis-server","/etc/redis/redis.conf"]

其中:

ports:
      - 6379:6379

中前面的6379是宿主机的端口,后面一个6379是容器内要启动的redis服务的端口号。后面的这个容器内redis服务的端口号,一定要和配置文件中:
在这里插入图片描述
指定的端口要一致!

也就是./redis/conf/redis.conf文件中指定的服务启动端口一定也是6379,否则,容器能成功启动,不会报错,但是服务无法访问。

build方式启动容器

一般来讲,通过镜像方式启动三方服务比如mysql、redis、sqlserver、nginx等,当前这类服务大多是支持docker的,可以很容器的找到对应的docker镜像。

我们自己的应用,可以通过build方式启动:

container-name:
    build:
      context: ./container-dir
      dockerfile: mydockerfile

其中context指定启动容器的主目录,dockerfile指定启动容器的配置文件名,dockfile在一定要在context指定的路径下存在。

dcokfile最主要的作用就是从宿主机映射我们的应用到docker容器内、暴露docker容器的端口到宿主机、在容器内运行服务。

容器服务的启停

在docker-compose.yml文件的当前路径下,通过一下命令创建并启动容器:

docker-compose -f docker-compose.yml up -d --build container-name

创建并启动build方式的容器服务。

docker-compose -f docker-compose.yml up -d redis

创建并启动镜像方式的容器。

创建容器之后,可以通过一下命令启停:

docker start container-name;
docker stop container-name;
docker restart container-name;

配置文件发生变化的话,需要通过第一种方式、重新创建并启动容器,新的配置才能生效。

docker容器的log文件

可以通过docker logs命令查看docker容器内服务的日志。

# 跟踪docker容器的日志
docker logs --follow container-name
# 最近30分钟的容器日志
docker logs --since 30m container-name
# 2024-04-26之后的10条日志
docker logs --since '2024-04-26' --tail=10 feixun-mssql

进入docker容器内部

docker exec -it container-name /bin/bash

比如:

[root@localhost feixun-mssql]# docker exec -it redis /bin/bash
root@redis:/data# ls
dump.rdb
root@redis:/data# pwd
/data
root@redis:/data# 

相关推荐

  1. 《深度解析Docker命令:从入门到高级应用》

    2024-04-27 00:04:02       48 阅读
  2. docker命令

    2024-04-27 00:04:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 00:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 00:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 00:04:02       82 阅读
  4. Python语言-面向对象

    2024-04-27 00:04:02       91 阅读

热门阅读

  1. MySQL查出时间比实际晚8小时的解决方案

    2024-04-27 00:04:02       26 阅读
  2. Android ViewModel使用模板

    2024-04-27 00:04:02       35 阅读
  3. 【小浩算法cpp题解】合并两个有序链表(21)

    2024-04-27 00:04:02       34 阅读
  4. nvm 错误

    2024-04-27 00:04:02       30 阅读
  5. 展开说说:Android动画使用

    2024-04-27 00:04:02       27 阅读
  6. 什么是裸金属服务器?

    2024-04-27 00:04:02       35 阅读
  7. 原型模式(上机考试抽题)

    2024-04-27 00:04:02       31 阅读
  8. 01_numpy

    2024-04-27 00:04:02       36 阅读
  9. 使用 LLaMA Factory 微调 Llama-3 中文对话模型

    2024-04-27 00:04:02       34 阅读
  10. class092 贪心经典题目专题4【左程云算法】

    2024-04-27 00:04:02       36 阅读
  11. Oracle基础1

    2024-04-27 00:04:02       26 阅读
  12. tcp通信协议

    2024-04-27 00:04:02       29 阅读
  13. 日志处理初探-日志存储

    2024-04-27 00:04:02       28 阅读
  14. 【SAP ME 12】SAP NWDS(eclipse)下载、安装,配置

    2024-04-27 00:04:02       23 阅读
  15. SQL查询一页数据过多太慢

    2024-04-27 00:04:02       38 阅读
  16. 【C++】33 搜索旋转排序数组

    2024-04-27 00:04:02       32 阅读