docker基础

设置http 代理

vi /lib/systemd/system/docker.service,添加如下:

[Service]
Environment="HTTP_PROXY=http://192.168.1.1:3128"
Environment="HTTPS_PROXY=http://192.168.1.1:3128"
Environment="NO_PROXY=192.168.1.2,127.0.0.1"

查看 docker 基础信息:

docker info

设置镜像源

创建并编辑 /etc/docker/daemon.json

{
  "registry-mirrors" : [
    "http://ovfftd6p.mirror.aliyuncs.com",
    "http://registry.docker-cn.com",
    "http://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug" : true,
  "experimental" : true
}

镜像基础操作

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

docker image rm [选项] <镜像1> [<镜像2> ...]
  • 修改镜像名称
docker tag ab2c0e769134 sonic-slave-stretch:a793c28650b

搭建私有镜像

拉取registry镜像

docker pull registry

将registry的数据卷与本地关联,便于管理和备份registry数据

默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。

mkdir -p /opt/data/registry
docker run -d -p 5000:5000 --restart=always --name sonic_registry -v /opt/data/registry:/var/lib/registry registry

为需要上传到私有库的镜像打标签:

## 打标签的格式必须为 
## docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag ubuntu 192.168.1.2:5000/ubuntu 

使用 docker push 上传标记的镜像:

docker push 192.168.1.2:5000/ubuntu:latest

用 curl 查看仓库中的镜像

curl 192.168.1.2:5000/v2/_catalog
systemctl daemon-reload && systemctl restart docker

注意:若出现错误:proxy failed to complete the request,或者 received unexpected HTTP status: 504 Gateway Time-out 请取消代理。

如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirror": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "192.168.1.2:5000"
  ]
}

搭建私有docker源

管理私有镜像库

centos7 Docker私有仓库搭建及删除镜像

构建Dockerfile

这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,将在下一节中介绍,这里你只要知道构建的流程即可。

1、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

FROM 和 RUN 指令的作用:

  • FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
  • RUN:用于执行后面跟着的命令行命令。RUN 是在 docker build。有以下俩种格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:

FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。

注:最后的 . 代表本次执行的上下文路径。

$ docker build -t nginx:v3 .

命令大全

docker run

docker run :创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

示例:

  • 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
  • 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
  • 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

docker inspect

获取容器/镜像的元数据。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • –type :为指定类型返回JSON

示例:

docker inspect mysql:5.6

docker attach

连接到正在运行中的容器。

docker attach [OPTIONS] CONTAINER

attach是可以带上–sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器。

docker attach --sig-proxy=false mynginx

FAQs

docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置?

  • 方法1: 编辑 /etc/docker/daemon.json ,新增如下配置:
{
  "data-root": "/mnt/docker"
}
  • 方法2:通过软链接修改:

默认情况下Docker的存放位置为:/var/lib/docker

可以通过下面命令查看具体位置:

sudo docker info | grep "Docker Root Dir"

首先停掉Docker服务:

service docker stop

移动目录,并建立软链接:

mv /var/lib/docker /mnt/docker
ln -s /mnt/docker /var/lib/docker

docker.sock: connect: permission denied

问题描述:

dial unix /var/run/docker.sock: connect: permission denied

解决办法:将运行docker命令的用户加入docker组:

sudo groupadd docker
sudo usermod -aG docker $USER
sudo gpasswd -a $USER docker
newgrp docker

参考

Was this helpful?

0 / 0

发表回复 0