写点什么

Docker 镜像和容器

用户头像
飞跃
关注
发布于: 2021 年 05 月 21 日
Docker 镜像和容器

1、Docker 镜像

Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中仓库),用户也可以通过配置使用自定义的镜像仓库

1.1 列出所有本地镜像:docker images
REPOSITORY  TAG     IMAGE ID      CREATED        SIZEtomcat      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.7MAINTAINER      Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswdRUN useradd runoobRUN /bin/echo 'runoob:123456' |chpasswdRUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/localEXPOSE 22EXPOSE 80CMD /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 官方仓库(需要登录)


docker push 镜像名:标签
复制代码
1.12 配置镜像下载加速地址

编辑 daemon.json 文件,添加如下配置


1、vim /etc/docker/daemon.json{    "registry-mirrors": ["https://registry.docker-cn.com"]}2、systemctl daemon-reload3、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 应用
  1. 拉取镜像: docker pull 镜像名


1、docker pull training/webapp
复制代码


  1. 在容器中运行我们应用,并执行相关命令:docker run -d -p 宿主机端口:容器端口 镜像名 指令


docker run -d -p 5000:5000 training/webapp python app.py
> -p(小写): 进行docker容器和主机端口映射> 在 docker 容器中运行 python 应用> 通过命令 docker ps 查看运行中的容器> 'host:5000', 在浏览器上访问该web应用
复制代码


  1. 查看应用程序端口映射:docker port 容器ID/容器名

  2. 查看应用程序的日志: docker logs 容器ID/容器名

  3. 查看应用程序容器的配置: docker inspect 容器ID/容器名

  4. 停止容器docker stop 容器ID/容器名

  5. 重启已关闭的容器:docker start 容器ID/容器名

  6. 查看最近一次创建的容器:docker ps -l

  7. 重启正在运行的容器:docker restart 容器ID/容器名

  8. 移除容器(在容器停止的时候才能移除):docker rm 容器ID/容器名如果需要同时移除多个容器,容器之间空格分离

  9. 宿主机上和容器之间的文件拷贝docker cp file/directory 容器ID:路径


-- 将宿主机当前目录下的 index.html 拷贝到容器的 html 目录下docker cp  index.html 172addsssa:/usr/share/nginx/html
-- 将容器的 /www 目录拷贝到宿主机的 /tmp 目录下docker cp 96f7f14e99ab:/www /tmp/
复制代码


  1. 保存对容器的修改,生成新的镜像docker commit -m "commit message" image_name


-- 保存对容器的修改,生成新的叫做 nginx-fun 的镜像,默认 tag 为 latestdocker commit -m "fun" nginx-fun
复制代码



4、docker 连接

4.1 网络端口映射
docker run -d -P training/webapp python app.pydocker run -d -p 5000:5000 training/webapp python app.pydocker 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: 用来指定容器的名称
复制代码


发布于: 2021 年 05 月 21 日阅读数: 30
用户头像

飞跃

关注

还未添加个人签名 2018.08.09 加入

还未添加个人简介

评论

发布
暂无评论
Docker 镜像和容器