一、docker
虚拟机是物理层面的隔离;docker是application层面的隔离。虚拟机如vmware,建2台虚拟机他们的隔离是完全隔离的,使用前要提前好设置cpu/mem/硬盘等硬件资源的大小。
二、操作命令(centos)
安装docker
查询yum版本:yum info yum
查找能安装的安装包:yum search redis
或yum list| grep redis
查看具体的安装包信息:rpm -qi centos-release-6-10.el6.centos.12.3.x86_64
更新yum:yum update
卸载以前的软件:yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
安装docker依赖:yum install -y yum-utils device-mapper-persistent-data lvm2
添加docker社区版repository:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
列出可安装的版本:yum list docker-ce --showdumplicates|sort -r
选择一个版本进行安装:yum -y install docker-ce-18.06.1.ce-3.e17
启动docker
启动docker:systemctl start docker
设置docker开机自启动:systemctl enable docker
查看版本:docker version
image相关命令
运行helloWorld:docker run hello-world
(hello-world是镜像名称)
官方拉取ubuntu系统镜像:docker pull ubuntu:14.04
查看本地有哪些镜像:docker image ls
查看镜像内容:docker history imageId
拉取centos镜像并交互式运行:docker run -it centos
。先pull再run
删除镜像:docker rmi imageName
【1】制作docker镜像:docker build -t docker官网用户名/制作的镜像名称 .
,如docker build -t dockerLoginName/imageName .
。加上docker官网用户名是为分享做准备;如果不加则无法分享。
【2】根据container创建image镜像:docker commit containerName dockerUsername/newImageName
【3】分享镜像:docker login
登录已注册的账户;docker image push dockerLoginName/imageName
将本地制作的镜像推送到docker官网仓库。
container相关
列出container:docker container ls
或docker container ls -a
只列出container的id:docker container ls -aq
移除container:docker container rm containerId
移除所有container:docker container rm $(docker container ls -aq)
或docker rm $(docker container ls -qa)
查询没有运行的container:docker container ls -f "status=exited"
或docker container ls -s "status=exited" -q
退出container并关机:在container里执行exit
停止container:docker stop containerId
三、整体架构
底层技术
Namespaces:命名空间,用来做网络隔离
Control roups:做资源限制,如设置占用多少内存\cpu等
Union file systems:image和container的分层
四、Dockerfile文件内容
镜像文件名称必须是Dockerfile、关键字尽量使用大写
,关键命令解析:
1)FROM
FROM scratch #从头开始
FROM centos #使用centos作为系统,若没有则拉取
FROM centos:7.0 #使用系统+版本号
2)LABEL #相当于注释或者说明信息
LABEL version="1.0"
LABEL author="zhangsan"
3)RUN #执行命令,每执行一条RUN,就会多一层
RUN yum -y update
RUN yum -y install lrzsz
RUN yum -y update && yum -y install lrzsz \
net-tools
4)WORKDIR #进入或创建目录
WORKDIR /root #进入/root目录
WORKDIR test #系统没有,则自动创建/test目录
WORKDIR demo
RUN pwd #位于/test/demo目录
5)ADD and COPY #将本地文件添加到镜像里;ADD可以解压缩文件
ADD hello /
ADD xxx.tar.gz / #添加并加压到根目录
WORKDIR /root/test
COPY hello . #将hello拷贝到/root/test/目录下
6)ENV #
ENV MYSQL_VERSION 5.6 #设置常量
RUN apt-get -y install mysql-server="${MYSQL_VERSION}"
7)shell和exec写法的区别
#shell格式
RUN apt-get -y install lrzse
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
如内容:
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name" <----看这里
#exec格式
RUN ["apt-get","-y","install","lrzsz"]
如内容:
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/bash","-c","echo hello $name"] <----看这里
8)ENTRYPOINT与CMD的区别
#若docker指定了其他命令,CMD会被忽略
FROM centos
ENV name Docker
ENTRYPOINT echo "hello world" <---执行这条,后面的CMD不会被执行
CMD echo "hello $name"
#若定义多个CMD,只会执行最后一个
FROM centos
ENV name Docker
CMD echo "123"
CMD echo "hello $name" <---只会输出本条的CMD,之前的不会被执行输出