- 容器简单介绍
映像是一个轻量级的/独立的/可执行的包,它包含软件运行所需要的一切,包括代码,runtime,库,环境变量和配置文件等。
容器是一个运行的映像的实例,与宿主机隔离,在进行配置的情况下,访问主机的文件,端口。
容器运行本地应用程序的主机的内核。与虚拟机相比,它们具有更好的性能特征,虚拟机只能通过虚拟机管理程序对主机资源进行虚拟访问。容器可以获得本机访问,每一个都在一个进程中运行,比其他可执行文件占内存少。 - dockerfile
使用dockerfile定义容器运行所需的一切,容器内的环境与主机的环境是隔离的,所以需要将内部端口映射到外部,实现对容器内应用的访问。
例:
#use default official python runtime
FROM python
#set proxy
ENV http_proxy http://myproxy:8080
ENV https_proxy https://myproxy:8080
#set working directory
WORKDIR /app
#copy file that needed to run the container
ADD . /app
#install required moudule
RUN pip install redis
#run an app when container runs
CMD ["python", "app.py"]
在当前目录下,确保app.py, Dockerfile存在,然后构建名为test的映像,设置版本为1
docker build -t local/test:1 .
最后运行app
docker run -p hostPort:containerPort test
在我们终止该命令时,容器也相应被停止,使用detached模式使容器保持运行
docker run -d -p hostPort:containerPort --name=test local/test:1
- 容器之间的通信
当安装了docker以后,自动创建3个网络。
docker network ls
NETWORK ID NAME DRIVER SCOPE
b748881b7bba bridge bridge local
dc63fe79701a host host local
c31094e7948a none null local
可以看到docker创建的桥接网络,如果创建容器的时候不指定不同的网络的话,那么新创建的容器默认连接到桥接网络
docker network inspect bridge
链接到默认桥接网络的容器可以通过彼此的ip地址来相互通信,docker不支持自动服务发现,如果想要使用容器的名字实现容器之间的通信,则需要使用用户定义的网络模式,当然一种不推荐的做法是使用docker run --link containerToBeConnected
网友评论