(1) 启动Docker

     systemctl start docker 

    由于启动docker并没有提示,所以需要使用命令查看docker是否正常启动。

     systemctl status docker 

    Docker - 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 

    Docker - Docker的基础操作和使用

    NAME:镜像名称

    DESCRIPTION:说明

    START:收藏(点赞)数

    OFFICIAL:是否是官方镜像

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

  (3) 拉取镜像    

  // 语法
  docker pull 要拉取镜像的名[:版本号]
  // 例如:
  docker pull centos/mysql-57-centos7

  (4) 删除镜像(无法删除名下还有容器的镜像)

// 语法
docker rmi 镜像ID
// 镜像ID在使用docker images命令的时候会展示

  Docker - Docker的基础操作和使用

 

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

  Docker - Docker的基础操作和使用

  直接连接宿主机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 - Docker的基础操作和使用

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

    Docker - Docker的基础操作和使用

    此时再访问 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!):

      Docker - Docker的基础操作和使用

    重启registry容器:

       docker restart 容器名 

    查看私有仓库中镜像版本(tags):

       curl -XGET http://IP地址:5000/v2/镜像名/tags/list 

      Docker - Docker的基础操作和使用

    查询镜像的sha256值:

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

      Docker - Docker的基础操作和使用

    删除私有仓库镜像索引:

       curl -I -X DELETE http://IP地址:50500/v2/镜像名/manifests/sha256:值 

      Docker - Docker的基础操作和使用

    手动触发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 

相关文章: