
文章插图
Container技术其实并不是个新鲜事物,最早可以追溯到UNIX中的chroot(在1979年的V7 Unix中引入),它可以改变当前正在运行的进程及其子目录的根目录,在这种修改过的环境下运行的程序不能在指定的目录树之外访问文件,从而限制用户的活动范围,为进程提供了隔离空间 。
之后各种Unix版本涌现出很多Container技术,在2006年,Google提出了"Process Containers"期望在Linux内核中实现进程资源隔离的相关特性,由于Container在Linux内核中的定义过于宽泛混乱,后来该项目改名为CGroups(Control Groups),实现了对进程的资源限制 。
2008年,LXC(Linux Containers)发布,它是一种在操作系统层级上的虚拟化方法,用于在Linux系统上通过共享一个内核来运行多个互相隔离的程序(Container) 。LXC正是结合了Linux内核中的CGroups和对分离的名称空间的支持来为应用程序提供了一个隔离的环境 。而Docker也是基于LXC实现的(Docker的前身是dotClound公司中的内部项目,它是一家提供PaaS服务的公司 。),并作出了许多改进 。
使用Docker在使用Docker之前你需要先安装Docker(这好像是一句废话 。。。),根据不同的平台安装方法都不相同,可以去参考Install Docker | Docker Documentation或者自行Google 。
安装完毕之后,输入docker --version来确认是否安装成功 。
$ docker --versionDocker version 17.05.0-ce-rc1, build 2878a85复制代码
从Docker Hub中可以pull到其他人发布的Image,我们也可以注册一个账号去发布自己的Image与他人共享 。
[root@Jack ~]# docker search redis # 查看redis镜像是否存在[root@Jack ~]# docker pull redis # 拉取redis镜像到本机Using default tag: latestTrying to pull repository docker.io/library/redis ... latest: Pulling from docker.io/library/redisDigest: sha256:cd277716dbff2c0211c8366687d275d2b53112fecbf9d6c86e9853edb0900956[root@Jack ~]# docker images # 查看镜像信息REPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MBdocker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MBdocker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB复制代码
有了Image,之后就可以在其之上运行一个Container了,命令如下 。
[root@Jack ~]# docker run -d -p 6379:6379 redis # 运行redis,-p代表将本机上6379端口映射到Container的6379端口 -d代表在后台启动[root@Jack ~]# docker ps -a # 查看容器信息,如果不加-a只会显示当前运行中的容器# 如果想要进入容器中,那么需要执行以下命令[root@Jack ~]# docker ps # 先获得容器的idCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f928073b7eb redis "docker-entrypoint.sh" 45 seconds ago Up 44 seconds 0.0.0.0:6379->6379/tcp desperate_khorana[root@Jack ~]# docker exec -it 1f928073b7eb /bin/bash # 然后再执行该命令进入到容器中root@1f928073b7eb:/data# touch hello_docker.txt # 在容器中创建一个文件root@1f928073b7eb:/data# exit # 退出exit[root@Jack ~]# # 也可以在启动时直接进入 命令如下[root@Jack ~]# docker run -d -it -p 6379:6379 redis /bin/bash复制代码
我们对Container做出了修改,如果想要保留这个修改,可以通过commit命令来生成一个新的Image 。
# -m为描述信息 -a为作者 1f9是你要保存的容器id 取前3个字符 docker可以自行识别# sylvanassun/redis为镜像名 :test 为一个tag 一般用于标识版本[root@Jack ~]# docker commit -m "test" -a "SylvanasSun" 1f9 sylvanassun/redis:testsha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbd[root@Jack ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEsylvanassun/redis test e7073e8e5bd7 2 seconds ago 106.6 MBdocker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MBdocker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MBdocker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB复制代码
想删除一个容器或镜像也很简单,但在删除镜像前需要先删除依赖于它的容器 。
[root@Jack ~]# docker stop 1f9 # 关闭运行中的容器,相应的也有docker start id命令来启动一个容器1f9[root@Jack ~]# docker rm 1f9 # 删除容器1f9[root@Jack ~]# docker rmi e70 # 删除上面保存的镜像Untagged: sylvanassun/redis:testDeleted: sha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbdDeleted: sha256:751db4a870e5f703082b31c1614a19c86e0c967334a61f5d22b2511072aef56d复制代码
如果想要自己构建一个镜像,那么需要编写Dockerfile文件,该文件描述了镜像的依赖环境以及如何配置你的应用环境 。
# 使用python:2.7-slim 作为父镜像FROM python:2.7-slim# 跳转到/app 其实就是cd命令WORKDIR /app# 将当前目录的内容(.)复制到镜像的/app目录下ADD . /app# RUN代表运行的shell命令,下面这条命令是根据requirements.txt安装python应用的依赖包RUN pip install --trusted-host pypi.python.org -r requirements.txt# 暴露80端口让外界访问EXPOSE 80# 定义环境变量ENV NAME World# 当容器启动时执行的命令,它与RUN不同,只在容器启动时执行一次CMD ["python", "app.py"]复制代码
- 电磁炉用锅有讲究 电磁炉专用锅
- 【游戏世界】角色信息框的大妙用?这群玩家全玩明白了!
- 大厅挂画风水讲究-客厅风水
- 家居厨房有哪些风水讲究-家居风水
- 厨房吊顶风水讲究-家居风水
- 家居餐厅风水有讲究,餐厅的风水注意事项-家居风水
- 房屋卫生间的风水讲究-家居风水
- 家庭客厅风水讲究-客厅风水
- 卧室床位风水有讲究-家居风水
- 葡萄酒陈年可以更加成熟
