前言
学习一门新的技术,一定要学会带着两个问题去学。第一个问题:xx是什么;第二个问题:xx用来干什么。当你可以回答这两个问题的时候,说明你已经对这门技术有了一定的了解,相反,如果你学习了一门技术,却无法回答这两个问题,说明你还没有理解这门技术。
下面我将会围绕这两个问题并结合自己的理解,用最通俗易懂的话帮助你来认识docker。
初识docker
docker是什么?
简单的回答就是:docker是容器引擎的一种。这句话里有两个关键字:容器引擎、一种。想要理解这句话,必须了解这两个关键词。‘一种’很好理解,说明容器引擎很多,docker只是其中之一。
docker用来干什么?
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交
付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
在工作中用起来真的很方便,现在Docker使用越来越广泛了,大多数公司都会使用。掌握Docker的基本操作还是非常有用的。
docker三个基本概念:
1、image(镜像)
docker的镜像可以理解为虚拟机里的镜像,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。比如说 ubuntu就是一个镜像,和虚拟机里的镜像是一样的,从docker官网拉取的Ubuntu是非常纯净的,只有Ubuntu和核心,只有几十兆大小。
2、Container(容器)
docker容器是由Docker镜像创建的运行实例,类似VM虚拟机,支持启动,停止,删除等。
每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
还是用Ubuntu举例,把 pull 下来的Ubuntu镜像 run 起来,只需运行 docker run ubuntu ,此时已经运行起来了一个容器。
3、仓库(repository)
docker 仓库的作用就是用来托管镜像的。仓库分为公有仓库(Docker hub、Docker cloud等)、私有仓库(registry、harbor等)、本地仓库:在当前主机存储镜像的地方。
docker常用命令:
docker image ls : 查看docker镜像,可以简写为 docker images ,后者更为方便,博主推荐
docker pull 镜像名称 :从官方仓库拉取镜像
docker pull 仓库名称/镜像名称: 从个人仓库拉取镜像
docker rm 容器名称:删除容器;正在运行的容器是无法直接删除的,需要docker stop 容器后才可以删除,或是 docker rm -r
强制删除
docker rmi 镜像名或镜像ID: 删除镜像
docker container ls或dockers ps : 查看正在运行的容器
sudo docker container ls --all 或 ps -a: 查看所有的容器
docker stop 容器名或容器id:停止容器
docker save -o 保存的文件名 镜像名 :打包镜像
docker load -i 文件路径/备份文件 : 镜像解压
docker commit 容器 镜像 : 生成新的镜像
docker run -it 容器名称/id /bin/bash :运行容器,一般会加上`d`参数,后台运行
docker exec -it 容器名称/id /bin/bash 进入容器,退出容器不会导致容器停止
docker 没有加入组前,每次执行命令都需要加上sudo ,为了更快捷,可以用sudo groupadd docker 然后执行sudo gpasswd -a $USER docker,再执行newgrp docker 就ok了,试以下docker images 是否可以。
和仓库相关的命令:
docker login [仓库名称]
docker pull [镜像名称]
docker push [镜像名称]
docker search [镜像名称]
数据卷?
就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储
命令:
docker run -itd --name 容器名字 -v 宿主机目录:容器目录 镜像名称]
docker run -itd --name test1 -v ~/data/:/home/ ubuntu #目录
docker run -itd --name test1 -v ~/test.txt:/home/test.txt ubuntu # 文件
数据卷容器?
将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的
数据卷容器操作流程:
1、创建数据卷容器
2、其他容器挂载数据卷容器
注意:数据卷容器不启动
命令:
1、docker create -v 容器数据卷目录 --name 名称 镜像 #创建数据卷容器
docker create -v /data --name my_ubuntu ubuntu
2、创建两个容器,同时挂载数据卷容器
docker run --volumes-from 数据卷容器id/name -tid --name 容器名字 镜像名称
docker run --volumes-from myubuntu -tid --name test1-ubuntu ubuntu
docker run --volumes-from myubuntu -tid --name test2-ubuntu ubuntu
端口映射
想要在宿主机访问docker里的服务(mysql),需要将docker里的服务端口映射到宿主机
端口映射种类
1、随机映射 -P(大写)
docker run -d -P [镜像名称]
docker run -d -P nginx
2、指定映射 -p 宿主机端口:容器端口
docker run -itd -p 宿主机端口:容器端口 --name 容器名字 镜像名称