使用阿里云docker加速器
1.登录阿里云docker仓库
2.注册并进入自己的管理中心
3.点击左侧菜单栏的镜像加速器
4.在系统中创建配置目录
$ mkdir /etc/docker
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
$ systemctl daemon-reload
$ systemctl restart docker
一、Docker常用命令简要说明
- docker pull 命令从网络上下载镜像
$ docker pull ubuntu #默认下载最新的ubuntu镜像
$ docker pull ubuntu: 14.04 #下载标签14.04的ubuntu镜像
- docker images 命令可以列出本地主机上已有的镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest f975c5035748 34 hours ago 112.4 MB
- docker inspect 命令可以获取该镜像的详细信息
$ docker inspect 镜像ID
- docker search 命令可以搜索远端仓库中共享的镜像
支持的参数:
--automated=false #仅显示自动创建的镜像
--no-trunc=false #输出信息不截断显示
-s, --stars=0 #指定仅显示评价为指定星级以上的镜像
$ docker search mysql #搜索带有mysql关键字的镜像
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 5757 [OK]
docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 1817 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 397 [OK]
.
.
.
- docker rmi 命令可以删除镜像
$ docker rmi 镜像ID #会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身,加-f参数可强行删除
$ docker rmi 镜像名:TAG #删除镜像标签
- docker rm 命令可以用来删除容器
-f, --force=false #强行终止并删除一个运行中的容器
-l, --link=false #删除容器的连接,但保留容器
-v, --volumes=false #删除容器挂载的数据卷
$ docker rm 容器ID(或输入部分ID亦可)
- docker commit 命令用来创建新镜像
-a, --author="" #作者信息
-m, --message="" #提交信息
-p, --pause=true #提交时暂停容器运行
$ docker commit -m "first commit" -a "GhostBenson" 容器ID 新镜像名称 #创建一个新镜像
- docker import 命令基于本地模板导入镜像
$ cat ubuntu-14.04-minimal.tar.gz | docker import - ubuntu:14.04 #导入OPENVZ下载的系统模板
- docker save 命令将镜像存出到本地文件
$ docker save -o ubuntu_14.04.tar ubuntu:14.04 #将ubuntu14.04镜像存出到文件ubuntu_14.04.tar
- docker load 命令从存出的本地文件导入镜像到本地镜像库
$ docker load < ubuntu_14.04.tar
- docker push 命令可上传镜像到指定仓库(这里以阿里云docker仓库为例,请自行创建好自己的阿里云docker镜像仓库)
$ docker login --username=你的阿里云账户 registry.cn-hangzhou.aliyuncs.com #登录阿里云镜像仓库
$ docker tag [要上传的镜像ID] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[自定义镜像名称或版本号] #上传的镜像标识新的标签
$ docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[自定义镜像名称或版本号] #推送镜像到阿里云镜像仓库
$ docker pull registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[自定义镜像名称或版本号] #拉取阿里镜像仓库指定的镜像
- docker logs 命令可以获取容器的输出信息
$ docker logs 容器ID
- docker run -d 加-d参数可以让容器在后台以守护状态运行
$ docker run -d 镜像名 运行的命令
$ docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done" #以守护进程方式让容器在后台循环输出hello world
4de374f01789f010dade45883a5c471a0b69168416c2dd48f88510973778821d #容器的唯一ID
- docker stop 命令用来终止一个运行中的容器
$ docker stop 容器ID
- docker kill 命令用来强制终止容器
$ docker kill 容器ID
- docker exec 命令可以进入容器(docker attach命令不好用,具体原因百度)
$ docker exec -it 容器ID /bin/bash
- docker export 命令导出容器到本地文件
$ docker export 容器ID > test.tar
PS:
可以用docker load命令来导入一个镜像文件,又可以使用docker import命令来导入一个容器快照,这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。
二、创建和使用私有仓库
- 在一台指定服务器(172.18.71.220)中创建私有仓库
$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry #下载并启动一个registry容器创建本地私有仓库服务并把默认仓库存储位置/tmp/registry变更为/opt/data/registry
- 将镜像上传到私有仓库中
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_lnmp1.4_v2.0 latest 668ba1ac3c12 3 days ago 2.313 GB
$ docker tag centos_lnmp1.4_v2.0:latest 172.18.71.220/centos_lnmp1.4 #用docker tag命令将要上传的镜像变更便签名为172.18.71.220/centos_lnmp1.4
$ docker push 172.18.71.220/centos_lnmp1.4 #开始上传镜像到本地仓库
The push refers to a repository [172.18.71.220:5000/centos_lnmp1.4]
5bed680678c7: Pushed
d7dd01a1fb25: Pushed
b03095563b79: Pushed
latest: digest: sha256:a8414397687b7b9c6f96ae21dddad778e77e9aade486268466e3f81b49b76037 size: 949
$ curl -4 http://localhost:5000/v2/_catalog #查看本地仓库中的镜像
{"repositories":["centos_lnmp1.4"]}
PS:
在docker push这一步中很有可能会出现以下错误:
$ docker push 172.18.71.220:5000/centos_lnmp1.4
The push refers to a repository [172.18.71.220:5000/centos_lnmp1.4]
Get https://172.18.71.220:5000/v1/_ping: dial tcp 172.18.71.220:5000: getsockopt: connection refused
请编辑/etc/docker/daemon.json文件添加以下内容即可:
{ "insecure-registries":["你的本地仓库服务器IP:5000"] }
最后别忘了重启docker
$ systemctl restart docker
- 用内网服务器去拉取私有仓库
首先同上请先添加以下内容:
{ "insecure-registries":["你的本地仓库服务器IP:5000"] }
重启docker后即可正常拉取私有仓库镜像
三、数据管理
- 挂载一个主机目录作为数据卷(-P 是允许外部访问容器需要暴露的端口)
docker run -it -P --name web -v /home/docker_strong:/opt/webapp centos_lnmp1.4_v2.0 /bin/bash #定义一个名字为web的容器加载主机的/home/docker_strong目录到容器的/opt/webapp目录,进入容器并加载shell
docker挂载数据卷的默认权限是读写(rw),可以通过ro指定为只读,这样容器内挂载的数据卷就无法修改了
docker run -it -P --name web -v /home/docker_strong:/opt/webapp:ro centos_lnmp1.4_v2.0 /bin/bash
- 创建数据卷容器
docker run -it -v /dbdata --name dbdata centos #这种方法创建的数据卷容器,会在容器/目录创建一个dbdata目录此目录挂载了主机的所有磁盘空间
- 创建数据卷容器(指向性)
$ docker run -it -v /home:/dbdata --name dbdata centos #这种创建方法会把主机的/home目录挂载为数据卷容器的/dbdata目录,即在主机/home目录中写入新文件容器的/dbdata目录亦会出现新写入的文件