Docker - Docker的基础操作和使用

1. 基础的启动与关闭

  1. 启动Docker
    systemctl start docker
    由于启动docker并没有提示,所以需要使用命令查看docker是否正常启动:systemctl status docker,Active显示状态是running就表示正常启动了。
  2. 关闭Docker
    systemctl stop docker
  3. 重启Docker
    systemctl restart docker
  4. 开机自启Docker
    systemctl enable docker

2. 安装镜像

  1. 查看已安装的镜像
    docker images
  2. 查看指定镜像
    docker search centOS
    • NAME:镜像名称

    • DESCRIPTION:说明

    • START:收藏(点赞)数

    • OFFICIAL:是否是官方镜像

    • AUTOMATED:是否自动构建(免手动编译)

  3. 拉取镜像
    // 语法
    docker pull 要拉取镜像的名[:版本号]
    // 例如:
    docker pull centos/mysql-57-centos7
    
  4. 删除镜像(无法删除名下还有容器的镜像)
    // 语法
    docker rmi 镜像ID
    // 镜像ID在使用docker images命令的时候会展示
    

3. 容器操作

  1. 检查正在运行的容器
    docker ps -a
  2. 根据镜像创建容器
    // 1.交互式创建容器(非后台运行)
    // 语法
    docker run -i -t --name=自命名(唯一) 镜像[:版本] /bin/bash
    // 退出,退出即停止容器
    exit
    // 2.守护式创建容器(后台运行)
    docker run -d -i --name=自命名(唯一) 镜像[:版本]
    // 进入容器
    docker exec -i -t 容器自命名 /bin/bash
    // 退出容器
    exit
    
  3. 启动和停止容器
    • 启动容器:docker start <容器名或容器ID>
    • 停止容器:docker stop <容器名或容器ID>
  4. 文件操作

    • 从宿主机拷贝文件到容器:docker cp <宿主机目录/文件> <容器名:容器目录>
    • 从容器拷贝文件到宿主机:docker cp <容器名:容器路径/文件> <宿主机路径[/文件]>
    • 目录挂载(仅限于容器创建时):docker run -d -i --name=<自命名> -v <宿主机路径:容器路径> <镜像名:版本号>
  5. 查看容器详情
    docker inspect <容器名>
  6. 删除容器(无法删除正在运行的容器)
    docker rm <容器名>
  7. 容器保存为镜像
    docker commit <容器名> <镜像自命名>
  8. 备份镜像
    docker save -o 路径/文件名.tar 镜像名
  9. 根据镜像备份恢复镜像
    docker load -i 路径/文件名.tar

4. 常用环境部署

  1. MySQL
    ## 语法
    docker run -d -i --name=自命名 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=自命密码 镜像
    ## 这里的-p就是指端口映射,可以将宿主机和容器的端口连接
    ## 宿主机端口看需求是否需要和容器接口相同,取值最大65535,所以不同的话尽量往5位数上起,以免和其他应用冲突
    ## -e MYSQL_ROOT_PASSWORD 是初始化MySQL数据库root用户的密码的固定格式
    ## 示例
    docker run -d -i --name=wk_mysql -p 33066:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
    ## 直接连接宿主机33066端口就可以直接访问容器wk_mysql的服务
    
  2. Tomcat
    ## 语法
    docker run -d -i --name=自命名 -p 宿主机端口:容器端口 -v 宿主机路径:容器路径 镜像:版本
    ## 这里的端口和mysql里的是一个意思,但是为什么要创建目录挂载?
    ## 其实创建目录挂载就是为了便于在宿主机放置项目文件,使tomcat容器更方便的运行项目
    ## 示例
    docker run -d -i --name=wk_tomcat -p 18080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
    
  3. Nginx
    ## 语法
    docker run -d -i --name=自命名 -p 80:80 镜像
    ## 示例
    docker run -d -i --name=wk_nginx -p 80:80 nginx
    
  4. Redis
    ## 语法
    docker run -d -i --name=自命名 -p 宿主机端口:容器端口 镜像
    ## 示例
    docker run -d -i --name=wk_redis -p 6379:6379 redis
    

5. Dockerfile

  Dockerfile实际上是一系列的命令和参数构成的脚本,这些命令应用于基础镜像并创建一个新的镜像。从开发、测试、运维来看,保证了环境的一致性,排除环境的原因导致的问题,减少搭建环境花费的开销。注意:Dockerfile文件的文件名必须是"Dockerfile"。

  1. 主要语句
    • 基于镜像的操作:FROM 镜像名:版本号
    • 标注作者:MAINTAINER 作者名
    • 设置工作路径:WORKDIR 路径
    • 执行命令:RUN 命令
    • 添加文件:COPY 宿主机路径/文件 容器路径
    • 添加文件并解压:ADD 宿主机路径/文件 容器路径
    • 添加环境变量:ENV 环境变量
  2. 创建镜像
    docker build -t='镜像自命名' Dockerfile所在路径

6. 私有仓库

  1. 搭建私有仓库
    Docker官方提供了一个搭载私有仓库的镜像,通过创建此镜像的容器,即可完成私有仓库的搭建。
    docker pull registry
    默认上传到registry的镜像会保存到容器的/var/lib/registry目录下,所以最好将宿主机的目录也挂载到该目录下。
    docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name 容器自命名 registry
    验证私有仓库是否搭建成功:http://<IP地址>:5000/v2/_catalog
    在Docker的deamon.json文件中添加私有仓库:"insecure-registries" : ["宿主机IP:5000"]
    重启Docker:systemctl restart docker
    启动私有仓库容器:docker start 容器名
  2. 上传镜像到私有仓库
    给需要上传到私有仓库的镜像打一个标记,标记这是私有仓库的镜像:docker tag 镜像名 仓库IP:5000/镜像名

    此时就可以上传镜像到私有仓库:docker push 打标的镜像名

    此时再访问:http://IP地址:5000/v2/_catalog ,如果repositories数组显示上传的镜像代表上传成功。
  3. 删除私有仓库中的镜像(不建议)
    v2版本的docker禁止手动删除私有仓库中的镜像,需要配置registry容器的配置文件。使用文本编辑器打开registry容器的配置文件:
    docker exec -i -t 容器名 vi /etc/docker/registry/config.yml
    修改或者添加storage.delete.enabled属性为true,然后保存并退出(ESC :wq!):

    重启registry容器:docker restart 容器名
    查看私有仓库中镜像版本(tags):curl -XGET http://IP地址:5000/v2/镜像名/tags/list

    查询镜像的sha256值:curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://IP地址:5000/v2/镜像名/manifests/版本号

    删除私有仓库镜像索引:curl -I -X DELETE http://IP地址:50500/v2/镜像名/manifests/sha256:值

    手动触发registry容器垃圾回收:
    ## 进入registry容器
    docker exec -it 容器名 sh
    ## 执行垃圾回收
    registry garbage-collect /etc/docker/registry/config.yml
    ## 退出容器
    exit
    
    由于之前将宿主机和register容器做了挂载,所以需要手动删除宿主机的挂载位置下的镜像文件:rm -rf /挂载路径/docker/registry/v2/repositories/镜像名称
    再次访问私有仓库,则指定镜像已被删除:curl -XGET http://IP地址:5000/v2/_catalog
posted @ 2020-08-09 14:32  苍凉温暖  阅读(224)  评论(0编辑  收藏  举报