设置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"
]
}
管理私有镜像库
构建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