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# 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值