docker的使用

8 分钟阅读

一、安装和配置

  1. 安装docker

    sudo apt-get install docker-io

  2. 配置用户组

    sudo usermod -aG docker USER_NAME :避免每次使用特权身份,重新登录生效

  3. 查看docker信息

    docker info

  4. 启动和关闭docker服务

    sudo service docker restart : 重启docker服务

    sudo service docker stop : 关闭docker服务

二、镜像(image)

  1. 获取镜像

    docker pull NAME[:TAG]: NAME表示镜像名称,TAG表示标签(通常是版本号)

    • docker pull ubuntu:14.04: 下载ubuntu 14.04 docker
    • docker pull ubuntu: 没有指定标签,则下载最新,相当于ubuntu:latest
    • docker pull hub.c.163.com/public/ubuntu:14.04: 指定路径下载镜像
  2. 列出所有镜像

    docker images : 列出镜像信息

    $ docker images
    REPOSITORY          TAG         IMAGE ID            CREATED             SIZE
    ubuntu              16.04       4a689991aa24        11 days ago         116 MB
    ubuntu              latest      ea4c82dcd15a        11 days ago         85.8 MB
    hub.c.163.com/public/ubuntu   14.04  2fe5c4bba1f9   2 years ago         237 MB
    

    docker images -q : 列出images id,通过该命令可以实现各种批量操作

  3. 对镜像添加标签,同时也起到类似软链接的作用

    docker tag ubuntu:16.04 myubuntu:16.04

  4. 查看某个镜像的详细信息

    docker inspect ubuntu:16.04

  5. 查看某个镜像的创建历史

    docker history ubuntu:16.04

  6. 删除镜像

    docker rmi myubuntu:latest : 删除某个镜像,如果image id存在多个,则只是删除一个标签

    docker rmi 4a68999 : 删除image id为4a68999xxxx的所有镜像

    docker rmi -f ubuntu:14.04 : 强制删除某个镜像,如果存在容器使用该镜像时正常删除会报错

    docker rmi -f ${docker images -q} : 强制删除所有镜像

  7. 存储镜像和载入镜像

    docker save -o ubuntu_14.04.tar ubuntu:14.04 : 存储镜像

    docker load < ubuntu_14.04.tar : 导入镜像

    • docker load --input ubuntu_14.04.tar
  8. 镜像上传到docker hub

    docker push 注册用户名/镜像名称

三、创建镜像

基于已有镜像的容器创建

  1. 启动镜像,修改后退出,如下:

    $ docker run -it ubuntu:16.04 /bin/bash
    root@19e28671fe8d:/# touch test
    root@19e28671fe8d:/# exit
    exit
    $
    
  2. 提交镜像

    docker commit [OPTIONS] CONTAINER [REPOSITORY:TAG]

    docker commit -m "Add test file" -a "Docker Newbee" 19e28671fe8d mydocker:0.1

    -m, --message= : 提交的消息记录

    -a, --author= : 作者

基于本地模板导入

下载模板压缩包,然后导入,如下:

cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

使用Dockerfile创建镜像

创建Dockerfile文件,然后使用docker build命令生成镜像

四、容器(container)

基本命令

  1. 查看容器

    docker ps : 查看运行中的容器

    docker ps -a : 查看所有容器,包括没有运行的

    docker ps -q : 查看运行中容器的CONTAINER_ID

  2. 创建容器

    docker create -it ubuntu:16.04

    -i : 保持标准输入打开

    -t : 分配伪终端

    -d : 后台运行docker

    --name : 指定容器的别名

    --rm : 容器退出后自动删除

    --privileged: 特权执行

  3. 启动容器

    docker start CONTAINER_ID|NAME : 通过id或者name,启动容器;创建的容器或者终止的容器都可以start

    docker restart CONTAINER_ID|NAME : 终止并启动容器

  4. 创建并启动容器

    docker run -it ubuntu:14.04 : 进入容器,进行交互

    • docker run ubuntu:14.04 /bin/echo hello world: 在docker中运行程序后自动终止

    • docker run -d ubuntu /bin/sh -C "while true; do echo hello; done": 后台运行docker

  5. 读取容器的输出信息

    docker logs CONTAINER_ID|NAME

  6. 终止容器

    docker stop CONTAINER_DI|NAME: 终止容器

    docker stop ${docker ps -q} : 终止所有运行中的容器

  7. 进入容器

    docker attach CONTAINER_ID|NAME : 进入容器,可以进入一个正在运行的容器

    docker exec -it CONTAINER_ID|NAME /bin/bash : 进入容器,并执行bash终端

  8. 退出容器

    在容器内执行exit,退出且终止容器,按CTRL+D同效果;按CTRL+Q+P,退出但不终止容器

  9. 删除容器

    docker rm CONTAINER_ID|NAME : 删除退出或终止的容器,运行中的容器加-f强制删除

    docker rm -f ${docker ps -aq} : 删除所有容器

  10. 导出容器和导入容器 (这里与镜像类似,但没有历史记录,体积较小)

docker export -o mycontainer.tar CONTAINER_ID|NAME : 导出容器

docker import mycontainer.tar - test/ubuntu:0.01 : 导入容器

数据管理

  1. 创建数据卷

    docker run -it -v /dbdata --name dbdata ubuntu : 创建/dbdata数据卷

    docker run -it -v /home/tmp:/tmp ubuntu:14.04 : 前者是本地目录,后者是映射到容器的数据卷

  2. 数据卷共享

    docker run -it --volumes-from dbdata --name mydb ubuntu : 共享访问dbdata中的数据卷

  3. 删除数据卷

    docker rm -v dbdata : 删除容器,及其数据卷;没有-v参数,数据卷不会被删除

  4. 备份数据卷

    docker run --volume-from dbdata -v $(pwd):/backup --name worker ubuntu:14.04 tar cvf /backup/backup.tar /dbdata

五、仓库 (Repository)

  • Docker官方仓库:https://hub.docker.com
  • docker search ubuntu : 搜寻仓库中的镜像,ubuntu是搜寻关键字
  • docker pull index.tenxcloud.com/<namespace>/<repository>:<tag> : 指定服务器下载镜像

六、命令汇总图(来自网络)

该图来自网络,非常精炼,故贴在此处。

评论