目录
Docker 基本使用
从利用docker镜像,跑起容器开始。使用现成的镜像。
第一步:明确要使用容器运行的应用的镜像相关
- 明确镜像名(仓库名)
- 是否指定明确的镜像tag版本
- 查看本地(本地叫什么?)有哪些镜像:> docker images -a
- 如果本地没有,会从远程的registry中
- 对于从docker官方registry,没有指定用户名称空间的话,会根据在官方library名称空间中寻找,如果没找到会提示没找到。非官方的一定要带上用户名/仓库名 这样才会从指定用户下的仓库拉取。
第二步:运行一个官方nginx应用
docker run --name nginx_webserver -d -p 80:80 nginx
- docker run 会根据指定的镜像名到本地,到官方hub找镜像,然后解包镜像,创建container容器通过镜像,运行应用,将应用的输出返回给docker-client. docker client的输出是docker-daemon返回的。
- --name 是指定容器的名称
- -d 已守护进程方式运行
- -p 80:80 指定容器服务的端口,映射宿主机的端口。这种对应image配置了需要网络端口,这里指定端口号而已。如果应用需要而不指定会怎样?
- 还有一些如:-e 给容器指定环境变量;--device添加一个设备给容器;
第三步:单纯下载镜像,pull
上面的docker run,如果本地没有镜像,那么会从docker hub上取,然后创建容器通过镜像。
其实很多时候我们可以先下载镜像到本地,后面再执行docker run.
这就是registry提供的上传下载功能,创建私有repo。
docker pull redis
第四步:设置国内docker-hub
由于有时候docker官方hub被墙,那么设置国内的镜像docker-hub是可以加快pull速度
- 找到/etc/docker/daemon.josn
- 在文件添加如下json数据:
{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }
- 然后重启docker-daemon服务, 注意会已运行的容器会停掉:systemctl daemon-reload && systemctl restart docker
第五步:列出已有镜像和镜像物理目录在哪里
- 列出全部已有镜像: > docker images -a
- /var/lib/docker 是docker相关的物理目录
第六步:本地导入导出镜像及修改名字和tag
导出本地已有镜像:docker save image-id > a-file 或者参数指定文件 docker save image-id -o 'filepath'
导入镜像到本地: docker load < STDINPUT 或者 docker load -i 'filepath'
导入镜像会没有名字,可以通过docker tag image-id name:tag 来修改。修改存在的也可以。
第七步: 导入导出容器的文件系统
导出: docker export container > tarfile 或者docker export container -o 'filepath'
导入:docker import 'file' 会创建一个新的空文件系统的image然后导入file文件内容。详情google。这样可以将容器改变的做出新的镜像。
第八步: 宿主和容器互相复制数据
docker cp container:src_path host_dest_path
docker cp host_src_path container:src_path
第九步: 通过dockerfile定制我们自己的镜像
看篇文章《Dockerfile制作镜像》