zoukankan      html  css  js  c++  java
  • Docker 常用命令整理

    容器

    docker run ubuntu:18.04 echo hello docker 表示用18.04的ubuntu镜像新建一个容器,用这个容器来执行echo命令

    • docker run -i -t ubuntu [bash] 表示一个运行一个最新的ubuntu容器,并且进入到这个容器的bash中(不加i虽然可以进入bash,但是不可交互)。退出容器用exitctrl+D(退出时会关闭&不删除容器)
    • docker run -i -t -d ubuntu 容器后台运行,运行时的输出不会出现在宿主机的控制台上
    • docker run --name containerName -it ubuntu bash 指定容器的名称
    • docker ps 查看正在运行的容器
      • -a : 查看所有容器,包括已经创建但是不在运行中的容器
    • docker logs <id/name> 查看后台运行的容器的输出
    • docker start id/name 启动一个已经停止的容器
    • docker stop id/name 停止一个容器
    • docker top name 查看容器内部运行的进程
    • docker inspect name 查看容器的配置和状态

    进入后台运行的容器

    • docker attach 从容器中退出时,容器也会停止
    • docker exec 不会导致容器的停止
    • docker restart [-t seconds] id 重启正在运行的容器, -t表示等待的时间(秒)

    docker run -d --name containerTest3 ubuntu:18.04docker run -itd --name containerTest2 ubuntu:18.04 效果不一样,前者创建后就被停止了,后者在后台保持运行状态

    容器的导入和导出

    导出容器的状态,导入后变成镜像,不会保存原始镜像的layer信息。

    导出容器

    • docker export containerid> ubuntu.tar

    导入容器

    • cat ubuntu.tar | docker import - mysystem:mytag : 导入成了一个image,可以用docker images查看,
    • docker import dockertest.tar -- centos:tag
    • docker import - 容器:tag < fileName.tar : windows下可以这样导入
    [wangchao@localhost ~]$ cat containerTest2.tar | docker import - mysystem:tags
    sha256:1c174e9fbdee72b5427701e22033105a2c41d626f418501497240902bc5667ac
    
    [wangchao@localhost ~]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysystem            tags                1c174e9fbdee        8 seconds ago       64.2MB
    ubuntu              18.04               2eb2d388e1a2        6 days ago          64.2MB
    nginx               latest              8cf1bfb43ff5        9 days ago          132MB
    training/webapp     latest              6fae60ef3446        5 years ago         349MB
    

    删除容器

    删除容器时容器必须已经是关闭状态

    • docker rm -f id
    • docker container prune 清理掉所有终止状态的容器

    容器连接

    端口映射

    • docker run -d -P training/webapp python app.py 映射到主机的随机端口(大P)

    • docker run -d -p 5000:5000 training/webapp python app.py 自行指定端口(小p)

    • docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 指定主机的网络地址,将127.0.0.1:5001映射到容器的5000端口

    • docker port name [port] : 查看映射关系

    • run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 绑定udp端口需要再端口后加上/udp

    容器互联

    新建网络

    [wangchao@localhost ~]$ docker network --help
    Usage:  docker network COMMAND
    Manage networks
    
    Commands:
      connect     Connect a container to a network
      create      Create a network
      disconnect  Disconnect a container from a network
      inspect     Display detailed information on one or more networks
      ls          List networks
      prune       Remove all unused networks
      rm          Remove one or more networks
    
    • docker network create -d bridge test-net 建立一个网络
      • -d : 指定网络类型, bridge、overlay

    运行一个容器并连接到新建的 test-net 网络:

    • docker run -itd --name netSlave1 --network testNet twilight/nginx:ali

    打开新的终端,再运行一个容器并加入到 test-net 网络:

    • docker run -itd --name netSlave2 --network testNet twilight/nginx:ali

    安装ping:

    apt-get update
    apt install iputils-ping
    

    ping netSlave2 竟然直接ping了name(hostname是他的id, 他的hosts文件中记录了另一个容器的ip)

    配置DNS

    在宿主机的 /etc/docker/daemon.json 文件增加一下内容:

    {
      "dns" : [
        "114.114.114.114",
        "8.8.8.8"
      ]
    }
    

    重启生效,DNS会被应用到所有容器上

    docker run -it --rm ubuntu cat etc/resolv.conf

    root@1718bc16f2e6:/# cat /etc/resolv.conf
    search localdomain
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    

    手动指定容器的DNS:

    docker run -it --hostname slavehostname --dns=114.114.114.114 ubuntu:18.04 /bin/bash

    [root@localhost docker]# docker run -it --hostname slavehostname  --dns=114.114.114.114 ubuntu:18.04 /bin/bash
    root@slavehostname:/# cat /etc/resolv.conf 
    search localdomain
    nameserver 114.114.114.114
    

    参数说明:

    • -h HOSTNAME--hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname/etc/hosts
    • --dns=IP_ADDRESS : 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
    • --dns-search=DOMAIN : 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com

    如果在容器启动时没有指定 --dns--dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。

    镜像

    • docker images 列出本地的所有镜像
    • docker pull 下载镜像
    • docker search "" 查找相关的镜像,或者在http://hub.docker.com查看
    • docker rmi 镜像:tag 删除镜像
    • docker tag oldenv:tag 用户名/newenv:newtag 创建一个新的镜像,旧的镜像保留
    • docker push 用户名/newenv:newtag 推送自己的镜像到hub上,镜像的名字必须是用户名/envname:tag

    创建镜像

    把容器导出成镜像

    • docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 提交一个容器成为镜像

      • -m: 提交的描述信息
      • -a: 指定镜像作者
      • e218edb10161:容器 ID
      • runoob/ubuntu:v2: 指定要创建的目标镜像名
    • docker images 可以查看到提交的镜像,和容器的导入效果一样的

    [wangchao@localhost ~]$ docker commit -m "nginx with ali sources" -a "twilight" e6547d259b8f twilight/nginx:ali
    sha256:378d7ca4a813dd691df890bcb639228a81cc1b58440094cf9431883a8a9003d2
    
    [wangchao@localhost ~]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    twilight/nginx      ali                 378d7ca4a813        8 seconds ago       229MB
    mysystem            tags                1c174e9fbdee        4 minutes ago       64.2MB
    ubuntu              18.04               2eb2d388e1a2        6 days ago          64.2MB
    nginx               latest              8cf1bfb43ff5        9 days ago          132MB
    training/webapp     latest              6fae60ef3446        5 years ago         349MB
    

    导出&导入镜像到文件

    导出镜像的所有信息,导入后的镜像和原有的镜像一致。(注意与导出容器的区别)

    • docker save centos:self -o centos.tar 导出镜像到文件
    • docker load -i imagedata.tar 导入文件成镜像
    • 可与 docker commit containerid imagename:tag 配合使用

    从零构建镜像

    Dockerfile中每一行都产生一个层都有一个id,可能多个容器之间会共享一些层,可以节省资源。

    • docker build : 构建一个镜像,需要一个Dockerfile文件
    FROM    centos:6.7
    MAINTAINER      Fisher "fisher@sudops.com"
    
    RUN     /bin/echo 'root:123456' |chpasswd
    RUN     useradd runoob
    RUN     /bin/echo 'runoob:123456' |chpasswd
    RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D
    
    • docker build -t runoob/centos:6.7 . 创建一个镜像
      • -t : 表示目标镜像名
      • . : 表示Dockerfile文件所在的目录

    自带的ubuntu会因为缺少证书而无法更新源,只能先用旧的源安装上缺少的证书

    The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32

    root@e6547d259b8f:/etc/apt# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
    Executing: /tmp/apt-key-gpghome.SysU7qEDMN/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
    gpg: key 3B4FE6ACC0B21F32: public key "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>" imported
    gpg: Total number processed: 1
    gpg:               imported: 1
    
  • 相关阅读:
    G++与VS2015在变量作用域上的差异性
    SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
    带着SMART原则重新出发
    动态语言的灵活性是把双刃剑 -- 以Python语言为例
    程序员必知的Python陷阱与缺陷列表
    MySQL添加字段和修改字段
    java poi给sheet表格中的某个单元格添加批注
    Maven入门:使用Nexus搭建Maven私服及上传下载jar包
    Linux上两种网络连接方式
    linux创建账户并自动生成主目录和主目录下的文件
  • 原文地址:https://www.cnblogs.com/twilight0402/p/13411106.html
Copyright © 2011-2022 走看看