Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机,Docker容器提供轻量化的虚拟化方式、安装便捷、启停速度快。
Docker是一个开放源代码的开放平台软件,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。
什么是容器?
容器是包含在任何环境中运行所需的所有元素的软件包。容器可以虚拟化操作系统,并在任何地方运行,不管目标环境是私有数据中心、公有云,还是开发者的个人笔记本电脑。
容器支持在操作系统级别轻松共享 CPU、内存、存储空间和网络资源,并提供了一种逻辑打包机制,以这种机制打包的应用可以脱离其实际运行的环境。
容器的使用更多了占据了工作的内容,随着Go语言的兴起,Docker作为容器的最常用的载体,很好的起到隔离,与虚拟机比起来更多的对资源的有效利用;
为什么要用 Docker?
• 更高效地利用系统资源
• 更快速的启动时间
• 一致的运行环境
• 持续交付和部署
• 更轻松地迁移
• 更轻松地维护和扩展
Docker容器和传统VM技术,在技术实现上有所不同。下图显示的是VM与Docker容器的逻辑组成:
相较于VM,Docker容器作为一种轻量级的虚拟化方式,在应用方面具有以下显著优势:
1.启动docker /etc/init.d/docker start
2.搜索镜像 docker search centos
3.启动容器 docker run --name -h hostname
4.停止容器 docker stop CONTAINER ID
5.拉取镜像 docker pull mysql5.6 这里标注的是版本号
6.查看容器中的内容 docker inspect 容器id
7.运行安装好的镜像跑命令:run centos echo "hello world"
docker stop `docker ps -a -p` 停止所有的容器
docker exec -it 容器名 bash 进入到容器中
docker-php-ext-install 模块名 容器中安装模块
docker images #列出本地主机上的镜像
docker ps #列出运行的容器
docker ps -a #查看所有容器
docker ps -s #查看容器的大小,可以再原有-a基础上追加
docker search #查找镜像
docker save 镜像名 -o tar包 #镜像打包
docker load -i 镜像包 #导入docker save的镜像
docker rm 容器名 #删除容器
docker rmi 镜像 #删除镜像
docker search php7 #查找php7镜像
docker pull php7 #下载php7镜像,可以指定镜像tag
docker start name # 运行容器中停止的镜像,如name=showdoc
docker attach 容器id # 链接到正在运行的容器,观察该容器的运行情况,或者与容器到的主进程进行交互
docker system df 命令来便捷的查看镜像、容器、数据卷所占用的空间
docker image prune 虚悬镜像删除
docker image ls -f dangling=true 专门显示虚悬镜像(由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。)
docker image ls -a # 顶层镜像和中间镜像都展示
docker image ls -q # 列出镜像的id
docker top containerId *# 查看容器内容的进程信息
docker stats containerId # 查看统计信息,cpu,内存,存储,网络等;
-a 查所有信息
--format string 格式化输出
docker port containerId #查看容器的端口映射情况
docker diff containerID #查看容器内文件系统的变更
运行镜像:
docker run --name nginx-test -p 8080:80 -d nginx
参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
docker中宿主机与容器(container)互相拷贝传递文件的方法
1、从容器拷贝文件到宿主机
docker cp mycontainer:/opt/testnew/file.txt /opt/test/
2、从宿主机拷贝文件到容器
docker cp /opt/test/file.txt mycontainer:/opt/testnew/
需要注意的是,不管容器有没有启动,拷贝命令都会生效。
容器中删除文件 rm -rf 文件名
清理命令
杀死所有正在运行的容器 docker kill $(docker ps -a -q)
删除所有未打 dangling 标签的镜像 docker rmi $(docker images -q -f dangling=true)
通过镜像的id来删除指定镜像 docker rmi
列出所有的容器 ID docker ps -aq
停止所有的容器 docker stop $(docker ps -aq)
删除所有的容器 docker rm $(docker ps -aq)
删除所有的镜像 docker rmi $(docker images -q)
复制文件 docker cp mycontainer:/opt/file.txt /opt/local/docker cp /opt/local/file.txt mycontainer:/opt/
为这些命令创建别名
# ~/.bash_aliases
# 杀死所有正在运行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'
# 删除所有已经停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'
# 删除所有未打标签的镜像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
# 删除所有已经停止的容器和未打标签的镜像.
alias dockerclean='dockercleanc || true && dockercleani'
1、Error response from daemon: conflict: unable to delete 1402670d9079 (must be forced) - image is being used by stopped container 5c8c07b32f09
删除镜像失败
解决: 需要先删除不运行的容器,docker ps -a
docker rm 容器名
docker rmi 镜像名
Docker容器间通信方法:https://juejin.cn/post/6844903847383547911