镜像加速
如果发现Docker拉取镜像的速度非常缓慢,可以配置加速器来解决
阿里云镜像获取地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:
修改Docker的配置文件来设置加速地址
vim /etc/docker/daemon.json(如果没有该文件,新建一个)
{
"registry-mirrors": ["https://br10hqrl.mirror.aliyuncs.com"]
}
使配置文件生效
# 加载配置并重启
systemctl daemon-reload && systemctl restart docker
# 查看是否配置成功
docker info
运行
镜像
1. 获取镜像(下载镜像到本地)
可以使用 docker pull
命令来从仓库获取所需要的镜像。
格式:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体选项可通过 docker pull --help
下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。
完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。
[root@docker docker]# docker run -it ubuntu:latest /bin/bash
root@1b85b5b911b2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@1b85b5b911b2:/# cat /proc/version
Linux version 3.10.0-1062.9.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Fri Dec 6 15:49:49 UTC 2019
root@1b85b5b911b2:/#
其中,-t
选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i
则让容器的标准输入保持打开。
另:,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d
参数来实现。
2. 列出本地镜像
使用 docker images
或 docker image ls显示本地已有的镜像。
[root@docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 13 days ago 64.2MB
在列出信息中,可以看到几个字段信息
- 来自于哪个仓库,比如 ubuntu
- 镜像的标记,比如 latest
- 它的
ID
号(唯一) - 创建时间
- 镜像大小
镜像ID是镜像的唯一标识,一个镜像可以对应对个标签,因此在上面的例子中可以看到Ubuntu:16.04和latest拥有相同的ID,因为它们对应的是同一个镜像。
3. 删除本地镜像
要删除本地镜像,可以使用 docker image rm 命令,其格式:
docker image rm [选项] <镜像1> [<镜像2> ...]
或者
docker rmi [选项] <镜像1
注意:用ID、镜像名、摘要删除镜像
其中,<镜像>可以是镜像短ID、镜像长ID、镜像名 或者 镜像摘要
eg: docker image rm redis
-f 强制删除
docker rmr -f redis
4. 查找镜像
docker search redis
# 列出指定数量
docker search --limit 5 redis
5. 查看镜像所占空间
docker system df
6.虚悬镜像
表示为仓库名、标签都为<none>的镜像
容器
1.启动容器
1. 1 新建并启动
所需要的命令主要为 docker run
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND:容器启动后进入容器中要执行的命令
OPTIONS(常用参数)
-d : 让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下
-t : 选项让 Docker分配一个伪终端( pseudo-tty)并绑定到容器的标准输入上,
-i : 则让容器的标准输入保持打开。
--name : 为容器命名
-v : 创建数据卷
-p : 绑定端口
-P : 随机端口
docker 运行语法:docker run -p 本地端口:容器端口 镜像
后台运行语法:docker run -d 镜像
[root@docker docker]# docker run ubuntu /bin/echo 'Hello world'
Hello world
当利用 docker run
来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
1.2. 启动已终止容器
可以利用 docker start
命令,直接将一个已经终止的容器启动运行。
docker start CONTAINER [CONTAINER...]
2. 查看容器
docker ps ##查看启动的容器
docker ps -a ##查看所有容器
3. 守护态运行
需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d
参数来实现。
[root@docker ~]# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
38d95518d4fb650d3fad5f5a94553963c05c033efa2bc5e50f33f4a0cc9570a2
[root@docker ~]#
容器启动后会返回一个唯一的 id,也可以通过 docker ps
命令来查看容器信息。
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38d95518d4fb ubuntu "/bin/sh -c 'while t…" About a minute ago Up About a minute practical_leakey
[root@docker ~]#
可以通过 docker logs
命令获取容器的输出信息。
4. 终止容器
使用 docker stop
来终止一个运行中的容器
docker stop 容器 容器1
强制停止
docker kill 容器id或容器名
5.重启容器
docker restart 容器 容器1
6.删除容器
docker rm 容器 容器1
docker rm -f 容器 容器1
docker run -it ubuntu /bin/bash
docker run -itd ubuntu /bin/bash
docker ps -a
docker stop 36b0eaab1f82
docker start 36b0eaab1f82
docker kill 36b0eaab1f82
docker rm 36b0eaab1f82
docker rm -f 36b0eaab1f82
7.获取容器的输出信息
docker logs 容器 容器1
查看容器内运行的进程
docker top 容器
查看容器内部细节
docker inspect 容器
8.进入容器
1. docker exec -it 容器id /bin/bash
2. docker attach 容器id
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。(推荐)
exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
9.主机和容器间拷贝
容器拷贝到主机
docker cp 容器id:/opt/webapp/app.py d:/www
/opt/webapp/app.py : 容器中的文件
d:/www : 主机文件夹
主机拷贝到容器
docker cp d:/www/文件 容器id:/opt/webapp/
容器导入导出
export导出容器的内容留作为一个tar归档文件[对应import命令]
import从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
docker export 容器id > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
10.删除容器
docker rm CONTAINER [CONTAINER...]
docker 分层原理:...
docker commit
提交容器副本使之成为一个新的镜像
docker commit -m="提交描述" -a="作者" 容器id 要创建的目标镜像名:[标签名]
比如 ubuntu下安装vim
[root@base docker]# docker run -it ubuntu /bin/bash
root@df0d38777258:/# vim a.txt
bash: vim: command not found
root@df0d38777258:/# apt-get update
root@df0d38777258:/# apt-get -y install vim
root@df0d38777258:/# vim a.txt
root@df0d38777258:/# cat a.txt
this is a docker
此时已含有vim
退出容器
开始提交操作
[root@base docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df0d38777258 ubuntu "/bin/bash" 4 minutes ago Exited (0) 36 seconds ago nervous_payne
[root@base docker]# docker commit -m='install vim' -a='pykaka' df0d38777258 pykaka/ubuntu_vim:1.1
sha256:0f2a2b6be53abd47fd39ecebce0f2233fd76bdaa2af8bdbbfd381504511e426d
[root@base docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pykaka/ubuntu_vim 1.1 0f2a2b6be53a 51 seconds ago 176MB
ubuntu latest ba6acccedd29 7 months ago 72.8MB
[root@base docker]#
docker 推送到阿里云
https://cr.console.aliyun.com/cn-qingdao/instances
1. 创建命名空间
2.创建镜像仓库
3. 推送
4.拉取镜像
docker 推送到私有云
1.下载镜像docker registry
docker pull registry
2.运行私有库registry,相当于本地搭建docker hub(此处使用了数据卷)
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
3. 创建新镜像 ubuntu安装vim命令
4.curl验证私服库上有哪些镜像
curl -XGET http://ip:5000/v2/_catalog
5. 更改镜像格式为私服要求
docker tag 镜像:[Tag] ip:端口/镜像:[tag]
6.修改配置文件使之支持http
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://br10hqrl.mirror.aliyuncs.com"],
"insecure-registries": ["ip:5000"]
}
修改完不生效时重启docker,同时需重启私服仓库 执行第2步
7.推送到私服
docker push ip:端口/镜像:[tag]
8.curl验证私服库上有哪些镜像
9. pull 拉取到本地
docker pull ip:端口/镜像:[tag]