Docker 学习笔记

qaq

常用命令

docker run

docker run -d \
    --name mysql \
    -p 3306:3306 \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=123 \
    mysql
  • docker run:创建并运行一个容器,-d是让容器在后台运行
  • --name mysql:给容器起一个名字,必须唯一
  • -p 3306:3306:设置端口映射(宿主机端口:容器内端口)
    • 容器在宿主机运行,容器有自己的内存空间甚至IP地址,但这个IP是外部无法访问的
    • 可以将容器的端口和宿主机的端口建立端口映射,通过访问宿主机的相应端口访问容器
    • 容器内端口取决于进程,不需要改动
  • -e KEY=VALUE:设置环境变量
    • 环境变量由容器要求
  • mysql:指定运行的镜像的名字
    • 完整:[repository]:[tag]
    • tag不写默认latest

docker images

  • 查看本地镜像列表

docker save

  • 将镜像保存成包
  • docker save -o nginx.tar nginx:latest

docker rmi

  • 删除镜像
  • docker rmi nginx:latest

docker load

  • 加载镜像包
  • docker load -i nginx.tar

docker ps

  • 查看当前运行容器
  • docker ps
  • 只显示运行的容器
    • docker ps -a
    • 显示所有

docker stop

  • 停止容器
  • docker stop nginx

docker start

  • 启动容器
  • docker start nginx

docker logs

  • 查看日志
  • docker logs nginx
    • docker logs -f nginx
    • -f:follow
    • 一直查看日志,方便调试

docker exec

  • 进入容器
  • docker exec -it nginx bash

docker rm

  • 删除容器
  • docker rm mysql

数据卷

  • 数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
  • 创建数据卷会在宿主机文件系统 /var/lib/docker/volumes/卷名/_date的位置
  • 与容器内响应路径关联
  • 可以使用宿主机内的编辑器修改容器内的文件内容
  • 挂载需要再容器创建时就指定好,如果数据卷不存在会自动创建
    • docker run -v 数据卷:数据卷目录

常用命令

  • docker volume create:创建数据卷
  • docker volume ls:查看所有数据卷
  • docker volume rm:删除指定数据卷
  • docker volume inspect:查看某个数据卷的详情
  • docker volume prune:删除未使用的数据卷
  • docker inspect:查看容器是否有数据卷挂载

匿名卷

  • 容器运行自动创建的卷
  • 不推荐使用,不方便迁移

自定义挂载

  • docker run -v 本地目录:容器内目录
  • 本地目录必须以/./开头,否则会被认为是数据卷

自定义镜像

结构

  • 逐层打包
  • 可以利用已有的层

Dockerfile

是一个文本文件,包含一个个指令,用指令来说明要执行什么操作

指令
  • FROM:指定基础镜像
    • FROM centos:6
  • ENV:设置环境变量
    • ENV key value
  • COPY:拷贝本地文件到镜像的指定目录
    • COPY ./jrell.tar.gz /tmp
  • RUN:执行Linux的shell命令
    • RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
  • EXPOSE:指定容器运行时监听的端口,是给镜像使用者看的
    • EXPOSE 8080
  • ENTRYPOINT:镜像中应用的启动命令,容器运行时调用
    • ENTRYPOINT java -jar xx.jar
使用
  • cd进目录下
  • docker build -t 镜像名 Dockerfile目录docker build -t docker-demo .
  • .是当前目录下的Dockerfile

容器网络互连

  • 默认情况下,所有容器都是以bridge方式连接导Docker的一个虚拟网桥上
  • 运行Docker的时候会创建一个虚拟网卡:docker0
  • 同时给虚拟网卡创建一个虚拟网桥
  • 容器通过网桥和各自的IP建立联系
  • 但是这样分配的IP是动态的,各种情况可能会重新分配

自定义网络

加入自定义网络的容器可以通过容器名相互访问

  • docker network create

  • docker network ls

  • docker network rm

  • docker network prune

  • docker network connect

  • docker network disconnect

  • docker network inspect

  • 可以在创建容器的时候直接加入网桥,就不会加入默认网桥了

    • docker run --network
img_show