从零docker-基础操作

简单总结docker的安装和使用

Posted by Jerry Chen on November 7, 2019

本文将介绍在ubuntu19.10上安装docker的全过程。

docker的安装

  1. 安装docker

    1
    
     sudo apt-get install docker.io
    
  2. 测试是否安装成功

    1
    
     sudo docker            #会打印docker的所有命令
    
  3. 更换docker源为国内源

    新建如右文件: sudo vim /etc/docker/daemon.json,填入如下信息:

    1
    2
    3
    
     {
         "registry-mirrors": ["http://hub-mirror.c.163.com"]
     }
    

    接着,重启docker服务:

    1
    2
    
     systemctl daemon-reload
     systemctl restart docker.service
    

    额外的内容-支持的国内源有:

    1
    2
    3
    4
    
     网易: http://hub-mirror.c.163.com
     中科大: https://docker.mirrors.ustc.edu.cn
     阿里云: https://pee6w651.mirror.aliyuncs.com
     Docker官方中国区: https://registry.docker-cn.com
    

创建容器

第一个docker容器

docker允许在容器内运行应用程序,使用docker run命令在容器内运行一个应用程序。

1
2
jerry@ubuntu:~$ sudo docker run ubuntu:12.04 /bin/echo "Hello world"
Hello world

参数解析:

  • docker : docker执行程序;
  • run : docker命令,用以运行一个容器;
  • ubuntu:12.04 : 指定要运行的镜像,docker首先从本地查找镜像,如果不存在,docker就会从镜像仓库Docker Hub下载公共镜像;
  • /bin/echo “Hello world” : 在启动的容器里执行的命令;

以上命令可以解释为:docker以 ubuntu12.04 镜像创建了一个新容器,然后在该容器里执行 /bin/echo "Hello world"

值得注意的是:执行命令结束后该容器也会退出(Exited状态),再次启动该容器会重新执行一次关联命令,可通过logs查看打印。

方便起见,后面内容使用root账户操作。

交互式的容器

1
2
3
root@ubuntu:~# docker run -it ubuntu:12.04 /bin/bash
root@798449ab3710:/#
root@798449ab3710:/#

参数解析:

  • -t : 在新容器内指定一个伪终端或终端;
  • -i : 允许你对容器内的标准输入 (STDIN) 进行交互;
  • /bin/bash : 在启动的容器里新开一个控制台;

注意第二行root@798449ab3710:/#,此时我们已进入一个 ubuntu12.04 系统的容器;

退出交互容器使用:exit

后台容器

1
2
root@ubuntu:~# docker run -d ubuntu:12.04 /bin/sh -c "while true; do echo hello world; sleep 5; done"
55911c51cc4820d013c0de2877f84c4a70684822192b94a0ee6c06034cbc882f

参数解析:

  • -d : 后台运行;
  • /bin/sh -c “while true; do echo hello world; sleep 5; done” : 在启动的容器里每5s打印一次“hello world”;

操作容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker ps                       #列出正在运行的容器
docker ps -a                    #列出所有容器(主要用来查看容器id和name)

docker run --name mynginx -d nginx:latest     #运行一个容器并命名

docker start/stop/restart [容器id/name ...]    #启动/停止/重启容器
docker kill [容器id/name ...]    #杀掉容器

docker rm [容器id/name ...]      #删除容器
docker container prune           #清理所有停止状态的容器

docker logs CONTAINER            #列出指定容器日志
docker port CONTAINER            #列出指定容器端口映射

docker attach CONTAINER          #连接到正在运行的后台容器(建议-itd的)
docker exec -it CONTAINER /bin/bash  #在正在运行的容器中执行命令(容器系统中再开一个进程)

docker top CONTAINER             #查看指定容器中正在运行的进程

操作仓库

1
2
docker images                   #列出本地仓库
docker rmi [镜像{name:tag}/id ...]  #删除容器

docker导出导入

一种是使用 save 和 load 命令(操作对象是镜像):

1
2
docker save ubuntu:load > ubuntu.tar
docker load < ubuntu.tar

另一种是使用 export 和 import 命令(操作对象是容器):

1
2
docker export 98ca36 > ubuntu.tar
cat ubuntu.tar | sudo docker import - ubuntu:import

需要注意两种方法不可混用。