初识Docker
Docker是一个开源的应用容器引擎,让开发者 打包他们的应用及依赖包到一个可移植的镜像(images)中,然后发布到任何操作系统上。
容器是完全使用沙箱(sandbox)机制,相互之间不会有任何接口。
镜像(images)和容器(container)是Docker中两个重要的概念:
镜像(images):Docker将应用程序及其所需的依赖,函数库,环境、配置等文件打包在一起。
容器(container):镜像中的应用程序运行之后形成的进程就是一个容器,Docker会给容器做隔离,对外不可见。
镜像操作
- 镜像名称的组成:[repository]:[tag] 例如mysql:5.7
- 不加tag默认最新版本,repository表示镜像名称
常用的镜像命令
docker images:查看镜像
docker rmi images:删除镜像
docker push:推送到镜像服务器
docker pull:从服务器拉取镜像
docker save:保存镜像为压缩包
docker load:加载压缩包为镜像
从DockerHub中拉取一个Nginx镜像并查看
先查看已安装的镜像
docker images
拉取自己需要的镜像:
docker pull nginx
拉取完成之后查看已有的镜像:
docker images
保存镜像:
docker save -o 保存文件的名称 镜像名称
docker save -o nginx.tar nginx
加载镜像:
先删除本地镜像:
docker rmi nginx
然后再加载:
docker load -i nginx.tar
加载完成之后再查看镜像:
docker images
就会显示nginx这个镜像。
容器操作
创建并运行一个容器:docker run
停止一个正在运行的容器:docker stop
让停止的容器再次运行:docker start
重新启动容器:docker restart
删除一个容器:docker rm
暂停一个运行的容器:docker pause
让一个容器从暂停状态恢复运行:docker unpause
创建并运行Nginx的容器
docker run --name containername -p 8080:80 -d nginx
参数说明:
docker run:创建并运行一个容器
--name:指定容器的名字
-p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称
默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器
中的nginx。现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被
映射到容器的80,这样就能访问到nginx了。
运行nginx容器:
docker run --name ngi -p 8080:80 -d nginx
查看运行的容器:
docker ps
打开浏览器输入docker宿主机的ip和容器的映射端口,我是:118.178.197.65:8080,就可以看到如下界面
查看容器日志:
docker logs 容器名称
docker logs -f 容器名称 (添加-f可以持续查看日志)
查看容器状态:
docker ps
docker ps -a (查看所有容器状态,包括没有运行的)
数据卷
因为镜像中存储了应用程序的依赖,函数库、环境和配置等,一旦删除镜像这些数据也就都被删除了,数据卷就能解决这个问题。
数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。完成数据挂载后,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
数据卷的作用
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
数据卷操作命令
创建数据卷:docker volume create 数据卷名称
查看数据卷详细信息,包括关联的宿主机目录位置:docker volume inspect 数据卷名称
列出所有数据卷:docker volume ls
删除一个或多个指定的数据卷:docker volume rm 数据卷名称
创建一个数据卷,并查看数据卷在宿主机的目录位置
创建数据卷:
docker volume create html
查看所有数据卷:
docker volume ls
查看数据卷详细信息:
docker volume inspect html
可以看到,我们创建的html这个数据卷关联的宿主机目录为 /var/lib/docker/volumes/html/_data 目录。
挂载数据卷
在创建容器时可以通过-v参数挂载一个数据卷到容器内目录,代码如下:
docker run --name ng -v html:/usr/share/nginx/html -p 8080:80 -d nginx
参数解析:
-v html:/usr/share/nginx/html:把html这个数据卷挂载到容器内的这个/usr/share/nginx/html目录中
nginx默认网页在nginx中的存储位置就是/usr/share/nginx/html目录
挂载后,宿主机的/var/lib/docker/volumes/html/_data目录就是nginx的网页目录了,在这个目录中创建网页就可用直接访问了。创建一个test.html文件,里面写html基本结构,主体写hello docker,在浏览器中输入宿主机ip地址环绕8080端口和test.html就能看到如下页面: