安装
Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此, Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟Linux环境。
docker中的镜像像是Java中的类模版,容器则类型Java中的一个个实例对象,仓库就是存放镜像的地方。
安装步骤
- 检测centos版本:
cat /etc/redhat-release
。 - 卸载原有的docker。
- 设置存储库:
yum install -y yum-utils
;yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
记得将官方库修改为阿里云的库。 - 安装docker:
yum install docker-ce docker-ce-cli containerd.io
。 - 开启docker服务:
systemctl start docker
。 - 测试docker是否能够正常运行:
docker version
或者docker run hello-world
。 - 关闭docker服务:
systemctl stop docker
。
常用命令
帮助启动类命令
命令 | 作用 |
---|---|
systemctl enable docker | 开机启动 |
docker info | 查看概要信息 |
systemctl start docker | 开启docker |
systemctl stop docker | 关闭docker |
镜像命令
仓库名、标签都是none的镜像称为虚悬镜像。
命令 | 作用 |
---|---|
docker images | 列出本地主机的镜像 |
docker search 镜像名称 | 在远程仓库中查找镜像 |
docker pull 镜像名称 | 在远程仓库中下载镜像 |
docker system df | 查看镜像/容器/数据卷所占的空间 |
docker rmi 镜像名/镜像ID | 删除镜像,-f强制删除 |
容器命令
docker容器后台运行的时候必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。只有那些需要后台守护的才能用后台方式,例如redis。
命令 | 作用 |
---|---|
docker run 镜像名称 | 新建+启动容器,-d后台守护,-it前台交互 |
docker ps | 列出所有运行的容器实例 |
exit | 在容器内的交互界面输入,退出交互并关闭容器 |
Ctrl+p+q | 退出当前容器交互,容器转为后台运行 |
docker start 容器ID/容器名 | 启动已停止的容器 |
docker restart 容器ID/容器名 | 重启容器 |
docker rm 容器ID/容器名 | 删除容器 |
docker logs 容器ID/容器名 | 查看容器日志 |
docker exec -it 容器ID bash/shell | 进入运行中容器的交互界面,此时使用exit退出不会关闭 |
docker cp 容器ID:容器内路径 目的主机路径 | 将容器中的文件复制到主机 |
docker export 容器ID > 目标文件名 | 导出容器的内容作为tar文件 |
docker import | 从tar导入容器 |
docker commit -m="vim cmd add ok" -a="xiqin" 25dcc7777449 xiqin/myubuntu:1.3 | 将容器提交为镜像 |
docker镜像
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
镜像分层最大的好处是共享资源,方便复制迁移,复用性好。
Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
容器数据卷
Docker挂载主机目录访问如果出现cannot open directory.:Permission denied。解决办法:在挂载目录后多加一个--privileged=true
参数即可。
容器数据卷类似共享文件夹,可用于容器和主机之间传输文件。
容器卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过联合文件系统提供用于持续存储或共享数据的特性。卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
构建容器数据卷:docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
。
特点
- 数据卷可在容器之间共享或重用。
- 数据卷中的更改可以直接实时生效。
- 数据卷中的更改不会包含在镜像的更新中。
- 数据卷的生命周期一直持续到没有容器使用它为止。
软件安装
Tomcat进行docker安装时,新版可能需要删除webapps文件夹才能生效,再将webapps.dist改名为webapps,因为webapps.dist里面才有东西。
docker安装MySQL后,需要先修改字符集编码以解决中文乱码问题。
docker中的MySQL和客户端的字符集编码可能显示不一样,以docker中的版本为准。
Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除
Dockerfile
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
Dockerfile每条保留字指令都必须为大写字母且后面要跟随至少一个参数,且每条指令都会创建一个新的镜像层并对镜像进行提交。
构建步骤:编写Dockerfile文件,docker build命令构建镜像,docker run依照镜像生成容器。
Dockerfile一定要命名为Dockerfile
。
Docker执行Dockerfile流程
- docker从基础镜像运行一个容器。
- 执行一条指令并对容器作出修改。
- 执行类似docker commitl的操作提交一个新的镜像层。
- docker再基于刚提交的镜像运行一个新容器。
- 执行dockerfile中的下一条指令直到所有指令都执行完成。
Dockerfile实例
FROM centos:7
MAINTAINER xiqin<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u381-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u381-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_381
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
标签:容器,ID,镜像,docker,Dockerfile,Docker
From: https://www.cnblogs.com/xiqin-huang/p/17898658.html