Loading

docker

安装

Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此, Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟Linux环境。

docker中的镜像像是Java中的类模版,容器则类型Java中的一个个实例对象,仓库就是存放镜像的地方。

安装步骤

  1. 检测centos版本:cat /etc/redhat-release
  2. 卸载原有的docker。
  3. 设置存储库:yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo记得将官方库修改为阿里云的库。
  4. 安装docker:yum install docker-ce docker-ce-cli containerd.io
  5. 开启docker服务:systemctl start docker
  6. 测试docker是否能够正常运行:docker version或者docker run hello-world
  7. 关闭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

特点

  1. 数据卷可在容器之间共享或重用。
  2. 数据卷中的更改可以直接实时生效。
  3. 数据卷中的更改不会包含在镜像的更新中。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

软件安装

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流程

  1. docker从基础镜像运行一个容器。
  2. 执行一条指令并对容器作出修改。
  3. 执行类似docker commitl的操作提交一个新的镜像层。
  4. docker再基于刚提交的镜像运行一个新容器。
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成。

Dockerfile实例

FROM centos:7
MAINTAINER xiqin<xiqin@qq.com>

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
posted @ 2023-12-13 11:13  西芹-小汤圆  阅读(31)  评论(0)    收藏  举报