Docker 常用命令

镜像命令

1. docker images 查看镜像

  (docker images -a) -a, --all # 显示所有镜像 
  (docker images -q) -q, --quiet # 仅显示镜像id 

2. docker serach 搜索镜像

docker search mysql --filter=STARS=5000 搜索stars大于5000的

3. docker pull 镜像[:tag]

如果不写tag,默认就是latest,最新的版本

4. docker rmi 镜像id

    docker rmi -f 镜像id
    docker rmi -f 镜像id 镜像id
    docker rmi -f $(docker images -aq)删除全部镜像

提交镜像

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

容器命令

新建容器并启动

docker pull nginx
docker run -d -p 80:80 nginx  -d 后台 -p 端口映射
docker run -it centos /bin/bash 运行并进入容器内部 
docker exec -it nginx /bin/bash  进入当前正在运行的容器
docker attach 容器Id
# docker exec        # 进入容器后开启一个新的终端,可以再里面操作(常用)
# docker attach      # 进入容器正在执行的终端,不会启动新的进程。

列出所有运行的容器

docker ps [-a]

删除容器

docker rm 容器Id 

启动和停止容器

docker start 容器id        # 启动容器
docker restart 容器id    # 重启容器
docker stop 容器id        # 停止当前正在运行的容器
docker kill 容器id        # 强制停止当前容器

其他常用命令

容器日志查看

docker logs -tf -n 容器id

查看容器中进程的信息

docker top 容器id

查看镜像的元数据

docker inspect 容器id

从容器内拷贝文件到宿主机

docker cp 容器id:容器内路径 目的主机的路径

数据卷的管理

docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx # 创建卷
容器目录:/usr/share/nginx/html
主机目录:/data

docker volume ls  # 查看卷
docker volume inspect 卷名 查看卷路径
所有的docker容器内的卷,没有指定目录的情况下都是在"/var/lib/docker/volumes/xxxx/_data"(xxxx是卷名)
# 如何确定是具名挂载,还是匿名挂载,还是指定路径挂载
-v 容器内的路径                # 匿名挂载
-v 卷名:容器内的路径        # 具名挂载
-v /宿主机路径:容器内路径    # 指定路径挂载

Dockerfile

dockerfile常用指令:

 FROM 这个镜像的妈妈是谁?(指定基础镜像)

 MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)

 RUN 你想让它干啥(在命令前面加上RUN即可)

 ADD 给它点创业资金(COPY文件,会自动解压)

 WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)

 VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)

 EXPOSE 它要打开的门是啥(指定对外的端口)

 CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情,只有最后一个会生效,可被替代)
 ENTRYPOINT    指定这个容器启动的时候要运行的命令,可以追加命令
 ONBUILD       当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
 COPY          类似ADD,将我们文件拷贝到镜像中
 ENV           构建的时候设置环境变量!

构建镜像

docker image build -t 镜像 .
-t 打标签,.表示当前路径.执行必须在Dockerfile目录下执行

Docker 网路

docker run  -it --network none busybox:latest  /bin/sh
    --不为容器配置任何网络功能,没有网络 --net=none
docker run  -it --network container:containerID  busybox:latest  /bin/sh
    --与另一个运行中的容器共享Network Namespace,--net=container:containerID
docker run  -it --network host  busybox:latest  /bin/sh
    --与主机共享Network Namespace,--net=host
--自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--查看网络
docker network ls
--查看网络容器信息
docker network inspect mynet
--连接打通网络
docker network connect mynet tomcat01
# 连通之后就是将tomcat01放到了mynet网络下

Docker Compose

基本结构

一个典型的 Docker Compose 配置文件具有以下基本结构:

version: '3.9'
services:
  service1:
    image: image1:tag
    ports:
      - "8080:80"
    volumes:
      - ./data:/data
    environment:
      - ENV_VAR=value

  service2:
    image: image2:tag
    ports:
      - "8081:80"
    ...

详细参数说明

- version:指定 Docker Compose 配置文件的语法版本。
- services:定义的容器服务列表。
- serviceX:服务名称,可以根据需求自定义。
- image:容器镜像名称和标签。
- ports:端口映射配置。
- volumes:挂载卷配置。
- environment:环境变量设置。

Docker Compose 常用命令

- docker-compose up:构建(如果不存在)并启动所有容器。
- docker-compose down:停止并移除所有容器、网络和卷。
- docker-compose start:启动已构建的容器。
- docker-compose stop:停止已启动的容器。
- docker-compose restart:重启已启动的容器。

Docker 容器时区

docker容器采用了UTC时间,默认为零时区,而我们主要用的是CST时间,北京时间,位于东八区。时区代号:Asia/Shanghai,这导致两者相差8小时

进入容器执行命令

1.方法一

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.方法二(在有timedatectl命令的情况下)

timedatectl set-timezone Asia/Shanghai