Docker 基础

1 Docker 的常用命令

# linux 启动docker
sudo systemctl start docker 
# 帮助命令
docker version     # 显示docker的版本信息
docker info        # 显示docker的系统信息,包括容器
docker 命令 --help  # 万能命令

# 镜像命令
docker image -a                # 列出所有镜像
          --all             # 同上
          -q                # 只显示镜像的id
          --quiet           # 同上
docker image -aq               # 只显示所有镜像的id
docker search 镜像名或内容   # 搜索镜像
docker pull 镜像名:tag      # 下载镜像
docker rmi 镜像id                   # 删除镜像
docker rmi -f 镜像id, 镜像id,        # 删除指定镜像,-f是force强制删除,可以是多个 
docker rmi -f $(docker images -aq)  # 删除所有镜像

# 容器命令 PS:有了镜像才可以创建容器
## 新建容器并启动
docker run [可选参数] 镜像名:tag 
[可选参数]:           
   --name 容器名字         # 创建并运行 指定容器名字 的容器,不指定--name,则容器名字随机
   -d                     # 后台方式运行 
   -i, -t, -it            # 进入容器查看内容
   -p 主机端口:容器端口    # 指定容器端口的映射
   -P                     # 随机指定端口

## 列出容器
docker ps -a    # 列出当前正在运行的容器 + 历史运行过的容器
          -n=?  # 显示最近创建的容器
          -q    # 显示容器的编号
## 退出容器
exit          # 从容器中退回主机
Ctrl + P + Q  # 容器不停止退出

## 删除容器
docker rm 容器id                # 删除指定容器
docker rm -f $(docker ps -aq)   # 删除所有容器 -f强制删除,运行的也要被删除

## 启动和停止容器的操作
docker start 容器id     # 启动
docker restart 容器id   # 重启
docker stop 容器id      # 停止
docker kill 容器id      # 强制停止

## 常用的其他命令
docker run -d 镜像名:tag  # 后台启动容器
                          # 常见的坑: docker 容器使用后台远行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
                          # nginx 容器启动后,发现自己没有提供服务,就会立廖停止,没有程序了
docker log -ft 容器id     # 显示日志
           --tail number  # 显示一定数据的日志
docker top 容器id         # 查看进程信息
docker inspect 容器id     # 查看容器内部信息
docker stats --no-stream  # 查看容器 CPU、存内 使用情况

## 进入当前正在运行的容器
docker exec -it 容器id /bin/bash  # 进入容器后,开启一个新终端操作
docker attach 容器id /bin/bash    # 进入容器正在执行的终端

## 容器与主机的文件相互拷贝
docker cp 容器id:容器内路径 目的的主机路径 # 容器文件拷贝到主机
docker cp 目的的主机路径 容器id:容器内路径 # 主机文件拷贝容器

## 容器环境修改
docker run -d -p 8080:80 -e 环境配置内容 --name 容器名 镜像名:tag

## 交容器成为镜像
docker commit # 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 新的镜像名:[TAG]

# 容器数据卷
## 使用数据卷
docker run -it -v 主机目录:容器目录 --name 容器名 镜像id  # 没有指定主机目录的情况下,会在主机下的 docker/volumes 下成生一个文件夹
               -v 容器内路径   # 匿名挂载
               -v 卷名:容器内路径  # 具名挂载
               -v 主机目录:容器目录 # 指定路径挂载
               -v xxxxxxxxxxxxx:or   # or readonly # 容器只读该路径,主机可读写
               -v xxxxxxxxxxxxx:rw   # 默认rw readwrite  # 容器读写该路径

# --volumns-from: 使新建的容器02与已经存在的容器01有一样的挂载卷,他们都指向了宿主机中相同的文件夹
docker run -it --name 容器02 --volumns-from 容器01 镜像id

2 Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本
构建镜像过程

  1. 编写一个 dockerfile 文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、 阿里去镜像仓库)

2.1 Dockerfile 文件内容

FROM         # 基础镜像,一切从这里开始构建
MAINTAINER   # 镜像是谁写的,姓名+邮箱
RUN          # 镜像构建的时候需要运行的命令
ADD          # 步骤: 如:加tomcat镜像,tomcat压缩包,添加的内容
WORKDIR      # 镜像的工作目录
VOLUMN       # 挂载的目录
EXPOSE       # 暴露端口 如:80、8080
CMD          # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT   # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD      # 当构建一个被继承 Dockerfile 这个时候就会运行 ONBUILD
COPY         # 类似ADD,将我们的文件拷贝到镜像中
ENV          # 构建的时候设置环境变量

2.2 构建镜像

# 我们可以列出本地镜像的变更历史,查看别人是怎么做的
docker history 镜像id

# dockerfile 构建镜像,注意:最后一定要有 .
docker build -f dockerfile文件 -t 镜像名 . 

2.3 发布镜像

# 1、地址 https://hub.docker.com/ 注册自己的账号
# 2、确定账号可以登录
docker login -u 用户名 -p 密码         # 登录
docker push lqqgis/geoserver:1.0      # 上传镜像
docker tag 源镜像[:tag] 新的镜像[:tag] # 修改镜像tag

2.4 镜像 打包导出 与 离线导入

docker save 打包输出的路径 镜像id  # 将镜像打包,发送给别人
docker save 镜像 -o 文件.tar # 将镜像打包,发送给别人
docker load -i 待加载的镜像的包    # 导入镜像

3 自定义网络

# 查看所有的docker 网络
docker network ls # bridge: 桥接(默认)
                  # none: 不配置网络
                  # host: 和宿主机共享网络
                  # container: 容器内网络连通(用的少,局限少大)

# 在用户不进行网络配置的情况下,默认直接启动容器,其实执行了下面的代码
docker run -d -P --name [容器名] --net bridge [镜像名]
# 上述代码,使用的是默认的docker0,特点是:默认,域名不能打通,--link 可以容器互连,但是比较麻烦

# 自己建立网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 [网络名,如mynet] # 65535个

# 使用自己建立的网络启动容器
docker run -d -P --name [容器名] --net mynet [镜像名]

# 测试
docker run -d -P --name tomcat-net01 --net mynet tomcat  # ip:192.168.0.2
docker run -d -P --name tomcat-net02 --net mynet tomcat  # ip:192.168.0.3
docker exec -it tomcat-net01 ping 192.168.0.3 # 可以ping通
# 上面形成了一个tomcat的网络集群

4 网络连通

docker network --help # 查看网络的所有命令信息,其中有一个是connect
# connect  Connect a container to a network # 将容器连到一个网络上

docker network connect mynet tomcat01 # 将tomcat01 放到的mynet网络下,实现了 一个容器,两个IP地址
docker network connect bridge tomcat01 # 将默认的 bridge网络 与 配置在 tomcat01 容器中
posted @ 2023-03-27 14:18  lqqgis  阅读(71)  评论(0编辑  收藏  举报