docker-study

Docker

安装

1
2
3
4
5
6
7
8
9
10
sudo pacman -S docker                                     #安装docker
sudo systemctl start docker.service #开启docker守护进程
sudo systemctl enable docker.service #设置开启自启动
sudo usermod -aG docker $USER #将自己添加到docker组

#验证安装
docker version
docker info
docker pull hello-world
docker run hello-world

docker镜像加速

1
vim /etc/docker/daemon.json
1
2
3
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
1
2
3
4
5
#其他镜像
#网易
https://hub-mirror.c。163.com
#七牛云加速
https://reg-mirror.qiniu.com

使用

  • 例子

    1
    2
    docker pull archlinux          #拉取archlinux:latest 镜像
    docker run --name arch -it archlinux #交互式运行一个arch容器
  • 镜像使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #列出镜像列表
    docker images
    #REPOSITORY 镜像的仓库原
    #TAG 镜像的标签
    #IMAGE ID 镜像的ID
    #CREATED 镜像创建的时间
    #SIZE 镜像的大小

    #获取一个新镜像
    docker pull ubunt

    #查找容器
    docker search httpd
    #NAEM名字
    #DESCRIPTION 镜像的秒数
    #OFFICIAL 是否是docker官方发布的
    #stars github stars
    #AUTOMATED 自动构建

    #删除镜像
    docker rmi hello-world
    docker rmi image-ID

    #创建镜像
    # 方式1 从已经构建的容器中更新镜像,并且提交这个镜像
    docker commit -m="has update" -a="author" container-ID image-NAME:TAG

    # 方式2 使用Dockerfile指令来构建一个镜像
    cat Dockerfile
    ---
    FROM centos:6.7
    MAINTAINER Fisher "fisher@163.com"

    RUN /bin/echo 'root:12345' | chpasswd
    RUN useradd tom
    RUN /bin/echo 'tom:12345' | 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 tom/centos:6.7 .
    #-t 指定要创建的镜像名
    # . Dockerfile所在目录

    #设置镜像标签
    docker tag image-ID tom/centos:dev #多了一个新标签
  • 容器使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #查看Docker客户端的所有命令选项
    docker
    #了解指定docker命令
    docker stats --help

    #启动容器
    docker run -it ubuntu /bin/bash
    #-i 交互式操作
    #-t 终端
    #ubuntu 镜像
    #/bin/bash 交互的shell
    docker run -itd --name ubuntu-test ubuntu /bin/bash
    #-d 后台运行

    #查看容器
    docker ps -a
    #-a 查看所有的容器,包括停止的容器

    #启动一个容器
    docker start container-ID/NAME
    #停止一个容器
    docker stop container-ID/NAME
    #重启一个容器
    docker restart container-ID/NAME

    #进入容器
    docker attach container-ID/NAME
    #exit后 容器停止
    docker exec -it container-ID/NAME /bin/bash
    #exit后 容器不停止

    #导入和导出容器
    docker export container-ID/NAME > ubuntu.tar
    cat ubuntu.tar | docker import - test/ubuntu:v1

    #删除一个容器
    docker rm -f container-ID/NAME

    #运行一个web应用
    docker pull training/webapp
    docker run -d -P training/webapp python app.py
    #-P 将容器内部使用的网络端口随机映射到我们使用的主机上
    docker pull nginx
    docker run -d -p 8080:80 --name nginx-test nginx:latest
    #-p 8080:80 指定端口映射 主机8080 容器80

    #查看网络端口映射
    docker port container-ID/NAME
    #查看WEB应用日志
    docker logs -f container-ID/NAME
    #查看WEB应用程序的进程
    docker top container-ID/NAME
    #检查WEB应用程序
    docker inspect container-ID/NAME
  • 容器连接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #网络端口映射
    docker run -d -P image-ID/NAME
    docker run -d -p 8080:80 --name container-NAME image-ID/NAME
    docker run -d -p 127.0.0.1:80 image-ID/NAME
    #默认tcp端口
    docker run -d -p 127.0.0.1:5000:5000/udp image-ID

    #容器互联
    #新建网络
    docker network create -d bridge test-net
    #-d 指定网络类型 bridge 桥接 /overlay
    docker run -itd --name test1 --network test-net ubuntu /bin/bash
    docker run -itd --name test2 --network test-net ubuntu /bin/bash
    #容器 test1中 能直接 ping test2

    #配置DNS
    #所有的容器
    vim /etc/docker/daemon.json
    ---
    {
    "dns":[
    "114.114.114.114",
    "8.8.8.8"
    ]
    }
    ---
    #指定容器DNS
    docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
    #--rm 容器退出时,自动清理容器内部的文件系统
    #-h HOSTNAME 设定容器的主机名
    #--dns=IP_ADDRESS 添加DNS服务器
    #--dns-search=DOMAIN 设定容器的搜索域
  • 仓库管理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #DOCKER 官方仓库Docker Hub https://hub.docker.com 免费注册一个Docker账号
    #登录和退出
    docker login
    docker logout
    #搜索官方仓库中的镜像
    docker search ubuntu
    #拉取镜像
    docker pull ubuntu
    #推送镜像
    docker push NAME:TAG