1、Docker 镜像
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中仓库),用户也可以通过配置使用自定义的镜像仓库;
1.1 列出所有本地镜像:docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest da0729cd9201 12 months ago 463MB
> Repository: 镜像的仓库源
> Tag: 镜像的标签(默认 latest)
> Image ID: 镜像ID
复制代码
1.2 拉取镜像:docker pull
> docker pull NAME[:TAG] // 镜像名由(仓库源+镜像标签)唯一标识
复制代码
1.3 设置镜像标签:docker tag
> docker tag redis:latest myredis:test // 为 redis:latest 镜像添加新的标签 myredis:test
复制代码
1.4 获取镜像的详细信息:docker inspect
> docker inspect redis:latest
复制代码
1.5 查找镜像:docker search 关键字
// 查询官文的 nginx 镜像
> docker search --filter=is-official=true nginx
复制代码
1.6 构建镜像
1、创建一个 dockerfile 文件,其中包含一组指令告诉 docker 如何构建镜像:
root@localhost:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
> 每个指令的前缀需要大写
> 第一个 FROM 指定使用哪个数据源
> RUN 指令告诉 docker 在镜像内执行命令,安装什么
复制代码
2、使用命令 docker build -t 镜像名 dockerfile文件路径
构建镜像
docker build -t feiyue/centos:6.7 /tmp
> -t: 指定要构建的目标镜像名
> /tmp: Dockerfile 文件所在的目录
复制代码
1.7 更新镜像
1、更新镜像之前,需要使用镜像创建一个容器:docker run -t -i ubuntu:15.10 /bin/bash
2、在容器内使用 apt-get update 更新,完成更新之后 exit 退出容器;
3、通过命令提交容器副本:`docker commit -m="message" -a="作者" 容器ID 要创建的目标镜像名`
docker commit -m="has update" -a="feiyue" 1fc976fa3e5f feiyue/ubuntu:v1
复制代码
1.8 删除镜像:docker rmi 镜像名/镜像 ID
> docker rmi 15b7dbf7aa7f (镜像ID)
> docker rmi ubuntu:15.10 (镜像名=仓库源+标签)
复制代码
1.9 清理镜像:docker image prune
// 清理系统遗留的临时镜像文件,以及一些没有被使用的镜像
> docker image prune
复制代码
1.10 存出和载入镜像:docker save | docker load
// 导出镜像到指定路径下文件
docker save -o 路径/文件名 镜像名:标签
// 从指定路径下的 tar 文件载入镜像
docker load -i 镜像名:标签
复制代码
1.11 上传镜像:docker push
默认上传到 Docker Hub 官方仓库(需要登录)
1.12 配置镜像下载加速地址
编辑 daemon.json 文件,添加如下配置
1、vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2、systemctl daemon-reload
3、systemctl restart docker
复制代码
2、docker 容器启动
2.1 docker 运行容器中应用程序
命令:docker run 镜像名 执行指令
docker run ubuntu:15.10 /bin/echo "hello world";
> docker run: 运行容器中程序的指令
> ubuntu:15.10: 要运行的镜像(先从本地查找,不存在从镜像仓库 docker hub 下载)
> /bin/echo "hello world": 在容器中执行的命令(好比我们进入容器的命令行执行该命令)
复制代码
2.2 运行交互式容器
命令:docker run -t -i 镜像名 指定终端的命令
docker run -t -i ubuntu:15.10 /bin/bash
> -t: 表示在容器中指定一个终端或伪终端进行交互
> -i: 允许在容器内进行标准输入(STDIN)进行交互
> /bin/bash: 指定终端为 bash (可以通过该终端进行交互)
> Ctrl+D:退出容器
复制代码
2.3 后台模式启动容器
命令: docker run -d 镜像名 指定终端的命令 终端执行的程序
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
> -d: 表示以后台进程形式运行容器
> 该指令会返回生成容器的ID
> 可以通过 docker logs 容器ID/容器名 查看容器输出日志
复制代码
2.4 停止容器
命令:docker stop 容器ID/容器名
3、docker 容器使用
2.1 运行一个 web 应用
拉取镜像: docker pull 镜像名
1、docker pull training/webapp
复制代码
在容器中运行我们应用,并执行相关命令:docker run -d -p 宿主机端口:容器端口 镜像名 指令
docker run -d -p 5000:5000 training/webapp python app.py
> -p(小写): 进行docker容器和主机端口映射
> 在 docker 容器中运行 python 应用
> 通过命令 docker ps 查看运行中的容器
> 'host:5000', 在浏览器上访问该web应用
复制代码
查看应用程序端口映射:docker port 容器ID/容器名
查看应用程序的日志: docker logs 容器ID/容器名
查看应用程序容器的配置: docker inspect 容器ID/容器名
停止容器:docker stop 容器ID/容器名
重启已关闭的容器:docker start 容器ID/容器名
查看最近一次创建的容器:docker ps -l
重启正在运行的容器:docker restart 容器ID/容器名
移除容器(在容器停止的时候才能移除):docker rm 容器ID/容器名
(如果需要同时移除多个容器,容器之间空格分离)
宿主机上和容器之间的文件拷贝:docker cp file/directory 容器ID:路径
-- 将宿主机当前目录下的 index.html 拷贝到容器的 html 目录下
docker cp index.html 172addsssa:/usr/share/nginx/html
-- 将容器的 /www 目录拷贝到宿主机的 /tmp 目录下
docker cp 96f7f14e99ab:/www /tmp/
复制代码
保存对容器的修改,生成新的镜像docker commit -m "commit message" image_name
-- 保存对容器的修改,生成新的叫做 nginx-fun 的镜像,默认 tag 为 latest
docker commit -m "fun" nginx-fun
复制代码
4、docker 连接
4.1 网络端口映射
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
> -P: 是容器内部端口随机映射到主机的高端口
> -p(小写):是容器内部端口绑定到指定的主机端口
复制代码
4.2 容器命名
通过 --name
参数来指定容器的名称:
docker run -d -P --name runoob training/webapp python app.py
> --name: 用来指定容器的名称
复制代码
评论