前言
搞清楚docker、镜像和容器之间的关系,学习docker就很简单了
docker定义
Docker是一个开源的、轻量级的容器引擎(函数库、软件、工具),用于创建、管理和编排容器
docker获取
Docker引擎可以从Docker网站下载,也可以基于Github上的源码进行构建,有linux和Windows版本
docker安装
Docker安装涉及两个部件:Docker客户端和Docker daemon (服务端);daemon实现了Docker引擎的API
docker version
docker version 命令来检测客户端和服务端是否都已经成功运行
docker掌握
docker的镜像下载、运行新的容器、登录新容器、在容器内运行命令,以及销毁容器
对应运维人员远远不止这些
镜像定义
- 将Docker镜像理解为一个包含了OS文件系统和应用的对象
- 镜像等价于未运行的容器,如果作为一名开发者,可以将镜像比作类
- docker image ls 查看拉取的有哪些镜像
- 镜像包含了基础操作系统,以及应用程序运行所需的代码和依赖包
- Docker的每个镜像都有自己的唯一ID,用户可以通过引用镜像的ID或名称来使用镜像
- 从镜像仓库服务中拉取镜像到本地Docker主机,使用该镜像启动一个或者多个容器
- 镜像内部是一个精简的操作系统,同时还包含应用运行所必须的文件和依赖包
- 镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象
- 镜像就像停止运行的容器(类),镜像可以理解为一种构建时结构,而容器可以理解为一种运行时结构
- 使用docker container run 和docker service create 命令从某个镜像启动一个或多个容器
- 容器目的就是运行应用或者服务,这意味着容器的镜像中必须包含应用/服务运行所必须的操作系统和应用文件
镜像仓库服务
- Docker镜像存储在镜像仓库服务(Image Registry)中, 镜像仓库服务包含多个镜像仓库(Image Repository),每个镜像仓库包含多个镜像
- 官方和非官方镜像
镜像命名和标签
- 只需要给出镜像的名字和标签,就能在官方仓库中定位一个镜像,如 docker image pull ubantu:latest
- 从非官方仓库拉取镜像(Docker Hub下的账户)
- 从第三方镜像仓库服务拉取镜像(非Docker Hub)
镜像与分层
- Docker镜像由一些松耦合的只读镜像层组成
- Docker负责堆叠这些镜像层,并且将它们表示为单个统一的对象
- 查看镜像分层:docker image inspect ubantu:latest
- docker history 命令显示了镜像的构建历史记录
- 镜像树
共享镜像层
- 多个镜像之间可以并且确定会共享镜像层,这样可以有效节省空间并提升性能
多层架构的镜像
- Docker最值得称赞的一点就是使用方便,例如,运行一个应用就像拉取镜像并运行容器这么简单。无需担心安装、依赖或者配置
- 多层架构镜像解决了不同平台和不同架构的兼容问题
容器
- 如果本地有镜像,可以使用docker container run命令从镜像来启动容器 , 例如 docker container run -it ubuntu:latest /bin/bash
- -it 参数会将shell切换到容器终端
- ps -elf : 在容器内部运行ps命令查看当前正在运行的全部进程
- 按Ctrl+PQ组合键,可以在退出容器的同时还保持容器运行,这样shell就会返回到主机终端,可以通过查看shell提示符来确实
- docker container ls 命令查看系统内全部处于运行状态的容器
- docker container exec命令:可以将shell连接到一个运行中的容器终端
- 通过docker container stop和docker container rm命令来停止并杀死容器
- 容器是镜像的运行时实例,用户可以从单个镜像上启动一个或多个容器
- 虚拟机和容器最大的区别是容器更快并且更轻量级,与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核
- docker container run 启动容器
- docker container run 启动所需的镜像以及要运行的应用
- 容器随着其中运行应用的退出而终止,linux容器会在bash shell退出后终止
- docker container stop 手动停止容器运行
- docker container start 再次启动该容器
- docker container rm 删除容器
容器与虚拟机
- 虚拟机是硬件虚拟化,将硬件物理资源划分为虚拟资源
- 容器是操作系统虚拟化,容器将系统资源划分为虚拟资源
docker用法及常用命令
- docker / docker --help
- Usage:docker [OPTIONS] COMMAND
- Options:
- Management Commands:
- Commands:
- run ‘docker COMMADN --help’ for more information on a command
- docker version # 显示docker的版本信息
- docker info # 显示docker的系统信息,包括镜像和容器情况等
- docker history # show the history of an image
- docker history centos:latest
- docker images # Commands 查看本机上所有镜像
- docker images -a, docker images -f, docker images -q
- docker kill # Kill one or more running containers
- docker kill a58c8f8bb494
- docker ps # List containers
- docker pull / docker push # 下载和上传镜像
- docker rename # Rename a container
- docker restart # Restart one or more containers
- docker rm # Remove one or more containers
- docker rmi # 删除镜像
- docker run # Run a command in a new container
- docker search # 搜索镜像
- docker stop # Stop one or more running containers
- docker start # Start one or more stopped containers
- docker stats # 展示容器资源利用情况
docker镜像管理
- docker image
- docker image build # build an image from a Dockerfile
- docker image history # show the history of the image
- docker image inspect # display detailed information on one or more images
- docker image ls # 查看本机上的镜像
- docker image pull,docker image push # 拉镜像和上传镜像 ( docker pull / docker push 也可以)
- docker image pull mysql / docker image pull mysql:5.7
- docker image rm # 删除镜像 (docker rmi 也可以, docker rmi -f image_id # 强制删除镜像)
docker容器管理
- docker container # Manage container 容器管理
- docker container cp # Copy files/folders between a container and the local filesystem
- docker container create # Create a new container
- docker container exec # 终端重新连接到运行的容器
- docker container inspect # 查看容器的详细信息
- docker container kill # 杀死正在运行的容器
- docker container logs # 取容器的日志
- docker container ls # 查看所有容器
- docker container pause # 暂停容器中的进程
- docker container port # 查看容器的端口映射
- docker container prune # 删除全部停止的容器
- docker container rm # 删除容器
- docker container run # run a command in a new container
- docker container start # Start one or more stopped containers
- docker container stop # Stop one or more running containers
- docker container top # Display the running processes of a container
- docker container unpause # Unpause all processes within one or more containers
docker实操案例
启动简单容器的例子:
- 1.下载需求镜像到本地
- docker pull centos # 下载
- docker images # 查看
- 2.启动容器并运行应用
- docker container run -it centos:latest app.exe
- 若尝试在容器内执行一些基础命令,可能会发现某些指令无法正常工作,这意味着某些命令或者包可能没有安装。
- 3.容器进程
- ps -elf # 在容器内查看进程
- 容器当前只运行了一个进程 /bin/bash
- exit # 退出bash shell,那么容器也会退出(终止)
- Ctrl+PQ组合键 # 退出容器但并不终止容器运行,这样会切回到主机Docker主机的shell,并保持容器在后台运行
- docker container ls # 观察当前系统正在运行的容器列表
- docker container exec -it 92c542538820 /bin/bash # 终端重新连接到docker
- 重新连接容器后,会创建新的shell进程,这意味着在当前shell输入exit并不会导致容器终止
- 1.在当前shell下输入exit;2.docker container ls;3.docker container stop 92c542538820;4.docker container ls;5.docker container rm 92c542538820;6.docker container ls
docker run命令解读
有了镜像就可以创建和启动容器
新建容器并启动
docker run # run a command in a new container 在新的容器中运行命令
- Usage:docker run [OPTIONS] IMAGE [COMMADN] [ARG…]
- docker run IMAGE -it # 将shell切换到容器终端
- docker run IMAGE -p # 设置端口号(Publish a container’s port(s) to the host)
- docker run IMAGE -v # 绑定装载卷(Bind mount a volume)
- docker run IMAGE --env # 设置环境变量(Set environment variables)