• docker容器操作


    1、创建容器

    1.1、新建容器

    //新建容器
    sudo docker create -it ubuntu:latest
    //查看所有容器
    sudo docker ps -a
    //启动容器
    sudo docker start 8e80
    //停止容器
    sudo docker stop 8e80

    1.2、新建并启动容器

    docker run命令等同于docker create+docker start,利用docker run来创建并启动容器时,docker在后台运行的标准操作如下:
    01、检查本地是否存在指定的镜像,不存在就从公有仓库下载。
    02、利用镜像创建并启动一个容器。
    03、分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
    04、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
    05、从地址池配置一个IP地址给容器。
    06、执行用户指定的应用程序。
    07、执行完毕后容器被终止。

    //输出Hello world后容器自动终止
    sudo docker run ubuntu /bin/echo 'Hello world'
    //启动一个bash终端,允许用户交互(可使用ctrl+d或exit退出交互模式)
    sudo docker run -t -i ubuntu:14.04 /bin/bash
     -t, --tty                                   Allocate a pseudo-TTY
     -i, --interactive                         Keep STDIN open even if not attached

    1.3、守护态运行

    //通过-d参数可以让容器在后台以守护态运行
    sudo docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
    //可以通过docker logs查看容器输出信息
    sudo docker logs 0cb
    sudo docker logs -ft 0cb

    2、终止容器

    docker stop命令会首先向容器发送SIGTERM信号,等待一段时间后(默认为10s),再发送SIGKILL信号终止容器。
    //终止容器
    sudo docker stop 0cb
    //指定3s后终止容器
    sudo docker stop -t 3 0cb
    //立即终止容器
    sudo docker kill 0cb
    //查看终止状态容器ID信息
    sudo docker ps -a -q
    //启动/重启容器
    sudo docker start/restart 0cb

    3、进入容器

    3.1、attach命令

    sudo docker attach 容器名称/容器ID

    liuyongsheng@ubuntu:~$ sudo docker run -idt ubuntu
    c0e7b1acc3018a319e4a6fb8ad191a2286a8f493cb35465adb0a8531b9393546
    liuyongsheng@ubuntu:~$ sudo docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    c0e7b1acc301        ubuntu              "/bin/bash"         3 seconds ago       Up 2 seconds                            angry_mclean
    liuyongsheng@ubuntu:~$ sudo docker attach c0e7
    root@c0e7b1acc301:/# 

    缺点:当多个窗口同时attach到同一个容器时,所有窗口同步显示。当某个窗口命令阻塞,其它窗口也无法执行操作。

    3.2、exec命令

    //进入刚创建的容器并启动一个bash
    sudo docker exec -ti 容器id /bin/bash

    3.3、nsenter工具

    //获取容器进程PID
    PID=`sudo docker inspect -f "{{.State.Pid}}" 容器ID`
    //通过容器进程PID连接到容器
    sudo nsenter --target $PID --mount --uts --ipc --net --pid

    liuyongsheng@ubuntu:~$ sudo docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    c0e7b1acc301        ubuntu              "/bin/bash"         10 minutes ago      Up 8 minutes                            angry_mclean
    liuyongsheng@ubuntu:~$ PID=`sudo docker inspect -f "{{.State.Pid}}" c0e7`
    liuyongsheng@ubuntu:~$ echo $PID
    7363
    liuyongsheng@ubuntu:~$ sudo nsenter --target $PID --mount --uts --ipc --net --pid
    root@c0e7b1acc301:/# w
     14:52:24 up  1:52,  0 users,  load average: 0.02, 0.03, 0.00
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root@c0e7b1acc301:/# ps -ef 
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 14:43 ?        00:00:00 /bin/bash
    root         10      0  0 14:52 ?        00:00:00 -bash
    root         14     10  0 14:52 ?        00:00:00 ps -ef
    root@c0e7b1acc301:/# 

    4、删除容器

    docker rm [OPTIONS] CONTAINER [CONTAINER...]

    选项包括:
    -f, --force      Force the removal of a running container (uses SIGKILL) 强行终止并删除一个运行中的容器
    -l, --link         Remove the specified link 删除容器的连接,但保留容器
    -v, --volumes   Remove the volumes associated with the container 删除容器挂载的数据卷

    liuyongsheng@ubuntu:~$ sudo docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    c0e7b1acc301        ubuntu              "/bin/bash"         24 minutes ago      Up 23 minutes                           angry_mclean
    liuyongsheng@ubuntu:~$ sudo docker rm c0e7
    Error response from daemon: You cannot remove a running container c0e7b1acc3018a319e4a6fb8ad191a2286a8f493cb35465adb0a8531b9393546. Stop the container before attempting removal or force remove
    liuyongsheng@ubuntu:~$ sudo docker stop c0e7
    c0e7
    liuyongsheng@ubuntu:~$ sudo docker rm c0e7
    c0e7
    liuyongsheng@ubuntu:~$ sudo docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
    4b2fa37a901571606a067c07cf540e526ace3a4367765c4ef1dd1f53b587264b
    liuyongsheng@ubuntu:~$ sudo docker logs 4b2f
    hello world
    hello world
    liuyongsheng@ubuntu:~$ sudo docker rm -f 4b2f
    4b2f
    

    5、导入和导出容器

     docker export/docker import

    liuyongsheng@ubuntu:~$ sudo docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
    19305643e241        ubuntu              "/bin/sh -c 'while..."   5 minutes ago       Up 5 minutes                                   clever_volhard
    47a99b7b695b        ubuntu              "/bin/bash"              6 minutes ago       Exited (0) 5 minutes ago                       gallant_blackwell
    liuyongsheng@ubuntu:~$ sudo docker export 1930 > test_for_run.tar
    liuyongsheng@ubuntu:~$ sudo docker export 47a9 > test_for_stop.tar
    liuyongsheng@ubuntu:~$ du -sh test_*
    97M    test_for_stop.tar
    97M    test_f_run.tarliuyongsheng@ubuntu:~$ sudo docker rm -f 1930 47a9
    1930
    47a9
    liuyongsheng@ubuntu:~$ cat test_for_run.tar | sudo docker import - test/ubuntu:v1.0
    sha256:0cb33157929df8183a1aae6fd172303f1c42e9e9fd939e73cfac35124f47f019
    liuyongsheng@ubuntu:~$ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test/ubuntu         v1.0                0cb33157929d        9 seconds ago       97.3MB
    ubuntu              latest              6a2f32de169d        4 days ago          117MB
    centos              latest              a8493f5f50ff        10 days ago         192MB
    registry            latest              136c8b16df20        10 days ago         33.2MB

    容器快照文件会丢弃所有的历史记录和元数据信息(仅保存容器当时的快照状态),而镜像文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

  • 相关阅读:
    系统架构得11个原则
    深圳变更企业法人
    Mixpanel可以做些什么?
    jira tikcet 过滤版本
    Math.random().toString(36)使用 随机生成数字与字母的组合
    javascript多个等号含义
    登陆dev,AWS需要sso,ip到白名单
    MobSDK已停止支持非严格模式版本,请按上面编译告示接入合规版本!
    thinkphp 变量修饰符
    wsl 关闭 命令
  • 原文地址:https://www.cnblogs.com/liuyongsheng/p/6724753.html
Copyright © 2020-2023  润新知