• Docker 使用及常用命令


    https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/expose.html docker practice 资料
    -----------------------------------------------
    创建及运行对应的容器
    NVIDIA的GPU,需要使用nvidia-docker替换docker执行
    -----------------------------------------------
    sudo systemctl start docker 启动docker
    sudo docker run hello-world 测试是否安装成功
    docker system df 查看镜像、容器、数据卷所占用的空间
    docker image ls -a
    docker pull ubuntu:16.04 下载镜像
    docker image ls 列出已经下载下来的镜像
    docker ps -a ,容器exited状态下,可以通过此命令查看对应的ID
    docker image ls -f dangling=true 查看虚悬镜像
    docker image prune 删除虚悬镜像
    docker image rm 镜像ID 删除镜像
    docker volume rm containerID 删除对应的容器及对应的卷


    ----------------------------------------------
    docker 镜像保存及加载
    ----------------------------------------------
    docker commit <container-id> <image-name> #先保存container环境到的镜像image-name下,然后save保存后的镜像
    docker save <-o save-name.tar> <image-name> #保存到tar文件后,可以删除这个commit的image-name镜像
    docker load -i to-loaded-image.tar
    docker tag imageID REPOSITORYNewName:TAGNewName 修改image镜像的名字,原来的老名字是不变的,只是重新取了一个名字而已,所以也可以删除

    ----------------------------------------------
    从image中启动container,操作容器,进入容器,
    如果是NVIDIA需要使用nvidia-docker
    ----------------------------------------------
    1,docker run -dit --shm-size 8G -P -p 10022:22 -e PASSWORD=<password> --name containerName --volume /home/ubuntu/github:/workspace/github ImageName
    docker run -dit -P ImageName ,通过ImageName或者imageID启动创建容器,
    -P,--publish-all=false 指定容器暴露的端口,会自动随机映射 EXPOSE 的端口,
    或者-p 10022:22 --publish=[] 指定容器暴露的端口,映射自己设置的端口号10022到docker的22号端口号,创建完自己的docker,
    然后安装apt-get install openssh-client openssh-server,passwd设置密码,允许root登录权限 /etc/ssh/sshd_config 调整PermitRootLogin参数值为yes,service ssh restart重启生效;
    下次登录这个docker服务器,可以直接使用ssh -p 10022 root@ip 登录,这里的端口号要和创建docker映射的端口号一致
    -i, --interactive=false 打开STDIN,用于控制台交互;
    -t, --tty=false 分配tty设备,该可以支持终端登录,默认为false;
    --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
    --volume 会加载主机的绝对路径/home/ubuntu/github目录到容器的/workspace/github目录,也可以挂载对应的文件,这种数据卷独立于容器,Docker 不会在容器被删除后
    自动删除,所以在删除对应的容器的时候,添加上volume参数,也删除对应的卷,不然很占用无用的空间docker volume rm containerID,但是源目录一定得是绝对路径
    --name 给创建的容器命名
    --net host创建和host一致IP的容器
    2,docker container ls 查看刚才开启的容器,
    3, docker start containerID 启动容器,包括可以启动已经退出过的容器
    4,docker exec -it ContainerID bash 运行容器,推荐使用exec方式,因为如果从这个 stdin 中 exit,不会导致容器的停止
    只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。
    当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。如果使用 -d 参数时,容器启动后会进入后台,
    6,docker attach containerID 也可以进入对应的容器,但是在stdin中exit后,容器会停止,慎用,5,docker inspect SannyTest 查看容器的相关
    7, docker restart $CONTAINERID 重新启动容器
    8,临时退出一个正在交互的容器的终端,而不终止它:
    按 Ctrl-p Ctrl-q 。如果按 Ctrl-c 往往会让容器内应用进程终止,进而会终止容器

    --------------------------------------------
    使用 Dockerfile 定制镜像:
    --------------------------------------------
    使用Dockerfile构建镜像:在Dockerfile所在的目录运行“docker build -t sanny:v1 ."
    Dockerfile文件书写例如:
    FROM nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04 #继承的父容器
    MAINTAINER sanny #作者
    RUN apt-get update && apt-get install -y --no-install-recommends
    build-essential
    cmake
    tmux
    vim
    git
    wget
    curl
    ca-certificates
    libjpeg-dev
    libpng-dev
    libatlas-base-dev
    libboost-all-dev
    libgflags-dev
    libgoogle-glog-dev
    libhdf5-serial-dev
    libleveldb-dev
    liblmdb-dev
    libopencv-dev
    libprotobuf-dev
    libsnappy-dev
    protobuf-compiler
    python-dev
    python-numpy
    python-pip
    python-setuptools
    python-scipy &&
    rm -rf /var/lib/apt/lists/*
    && echo "root:root" | chpasswd #设置密码
    EXPOSE 22
    #EXPOSE 声明端口,详见docker_practice P90
    # 格式为 EXPOSE <端口1> [<端口2>...]。
    #在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,
    # 以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口
    CMD /etc/init.d/nginx start #启动服务
    WORKDIR /workspace

    bash界面输出中文乱码,添加中文的支持:
    locale -a 查看中文支持情况,apt-get install language-pack-zh-hans,然后在/etc/bash.bashrc 添加 export LC_ALL='zh_CN.UTF-8', source bash.bashrc,然后需要重启nvidia-docker restart containerID
    docker exec -it CONTAINER env LANG=C.UTF-8 bash

    添加可视化远程界面:使用安装docker vnc

    给用户添加docker权限
    sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
    newgrp docker #更新用户组

    --------------------------------------------------
    将新的container修改的东西,重新commit到对应的image
    虽然新制作了对应的image,但是上一层的image没法删除
    --------------------------------------------------
    1,[mydocker@test ~]$ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    96621f37028c 0ef2e08ed3fa "/bin/bash" 3 minutes ago Up 3 minutes thirsty_torvalds
    2,然后:docker commit 96621f37028c 0ef2e08ed3fa
    3,docker ps -a 查看新的image

  • 相关阅读:
    [蓝桥杯][基础练习VIP]完美的代价
    [蓝桥杯][基础练习VIP]分解质因数
    [蓝桥杯][基础练习VIP]Sine之舞
    [蓝桥杯][基础练习VIP]回形取数
    ZJOI 2006 书架
    HNOI2012 永无乡
    9.23 逃跑的牛Barn Running Away
    9.20 Magical multisets
    9.18 Roads on a kingdom
    【MySQL】MySQL复制表的两种方法
  • 原文地址:https://www.cnblogs.com/hansjorn/p/9954559.html
Copyright © 2020-2023  润新知