docker 入门

docker 入门

小白入门 Docker, 记笔记,以便后面温习

Reference:

官方文档, 只要一小时,零基础入门Docker

image: 镜像。镜像是可执行包 (executable package) 包括运行应用程序所需要的所有部件 – 代码,运行环境 (runtime),库(libraries),环境变量 (environment variables),以及配置文件 (configuration files)

container: 容器,即镜像的运行实例 (runtime instance)。也就是在内存中正在运行的镜像 (that is, an image with state or a user process)。 使用 docker ps 可以常看正在运行的容器 (running container)

比较:

  1. 容器运行在原生 Linux 系统中,并和其他容器共享主机内核 (the kernel of the host machine)。它运行在一个独立进程中,相比其他可执行程序,不会占用更多的资源,因此非常清理化 (lightweight)
  2. 虚拟机 (virtual machine / VM) 运行一个全面的 “访客”操作系统 (full-blown “guest” operating system),通过 虚拟机管理程序 (hypervisor) 实现对主机资源的虚拟访问 (virtual access)。通常, VMs 提供比大多数应用程序所需的更多的资源。

常见命令:

  1. 查看 docker 版本信息 docker --version
    $ docker --version                       Docker version 17.10.0-ce, build f4ffd25
  2. 查看 docker 详细信息 docker info or docker version
    $ docker info
    
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 17.12.0-ce
    Storage Driver: overlay2
    ...
  3. 查看所有镜像 (ls = list )
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE                                    friendlyhello       latest              b4749c9a4805        3 hours ago         150MB                                     python              2.7-slim            b16fde09c92c        44 hours ago        139MB                                   hello-world         latest              f2a91732366c        4 months ago        1.85kB
  4. 查看所有容器 (运行的镜像)
    --all 表示所有曾经运行过的容器,包括退出的容器

    ## List Docker containers running
    $ docker container ls 
    ## 或者
    $ docker ps --all/-a
    
    ## List Docker containers all
    $ docker container ls --all
    CONTAINER ID     IMAGE           COMMAND      CREATED            STATUS
    54f4984ed6a8     hello-world     "/hello"     20 seconds ago     Exited (0) 19 seconds ago
    
    ## List Docker containers all in quiet mode
    $ docker container ls -aq
  5. 获取 docker 的 ip 地址
    $ docker-machine ip
    192.168.99.100
  6. 在容器中运行 image
    $ docker run xxx
    ## -d: --detach, run container in background (后台运行)
    ## -p: --publish list, publish a container's port to the host
    ## -i: --ineractive, keep STDIN even if not attached
    ## -t: --tty, allocate a pseudo-TTY
    
    # map the machine's port 4000 to the container's published port 80
    $ docker run -p 4000:80 friendlyhello
    
  7. 启动/停止/重启 container (使用 CONTAINER ID, 用 ls 查看)
    $ docker start container_name/container_id
    $ docker stop container_name/container_id
    $ docker restart container_name/container_id
    
    ## docker container stop 1fa4ab2cf395

    后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

    $ docker attach container_name/container_id
  8. 删除镜像和容器,注意: 删除镜像前必须先删除以该镜像为基础的容器
    $ docker container rm container_name/container_id
    $ docker image rm image_name/image_id

    或者简写为:

    $ docker rm container_name/container_id
    $ docker rmi rm image_name/image_id
  9. 利用 Dockerfile 构建镜像
    # Form:
    # docker build [OPTIONS] PATH | URL | -  
    # 从当前目录读取 Dockerfile 构建
    $ docker build -t friendlyhello .

    本地保存/加载镜像

    $ docker save -o centos.tar xianhu/centos:git # 保存镜像
    $ docker load -i centos.tar  # 加载镜像
  10. 容器在修改后,如何更新镜像
    # Form:
    # docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    # -m: commit message
    # -a: author
    $ docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git
  11. 上传到 remote repository
    注意:注册服务器(Registry)是存放仓库的地方,一般会有多个仓库。而仓库 (repository) 是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用 tag (标签) 区分,比如 Ubuntu 仓库存放有多个版本 (12.04, 14.04 等)的 Ubuntu 镜像

    # log in to the Docker public registry on your local machine
    $ docker login
    
    # tag the image
    # Form:
    #docker tag image username/repository:tag
    
    # e.g.: This puts the image in the get-started repository and tag it as part2
    $ docker tag friendlyhello john/get-started:part2
    
    # upload the tagged image to the repository 
    # Once complete, the results of this upload are publicly available
    $ docker push username/repository:tag
  12. pull and run the image from the remote repository
    从远程下载:

    $ docker pull centos

    直接运行远程仓库的镜像:

    $ docker run -p 4000:80 username/repository:tag
    
    $ docker run -p 4000:80 john/get-started:part2
    Unable to find image 'john/get-started:part2' locally
    part2: Pulling from john/get-started
    10a267c67f42: Already exists
    f68a39a6a5e4: Already exists
    9beaffc0cf19: Already exists
    3c1fe835fb6b: Already exists
    4c9f1fa8fcb8: Already exists
    ee7d8f576a14: Already exists
    fbccdcced46e: Already exists
    Digest: sha256:0601c866aab2adcc6498200efd0f754037e909e5fd42069adeff72d1e2439068
    Status: Downloaded newer image for john/get-started:part2
     * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d 博主赞过: