专做情侣装网站百度网盘云资源搜索引擎
1.前言
初见DOCKER,感觉和我们常用的虚拟机(VMware,viurebox)类似,是一个独立于宿主机的模块,可以解决程序在各个系统间的移植,但它真的仅仅是这样嘛?
2.容器的优缺点
1.1.容器优点
- 敏捷性:相对于虚拟机没有“虚拟操作系统”、“Hypervtaor层”,占用资源更低,启动时间也更快。同时可以控制容器资源的分配;
- 隔离性:与实体宿主环境无关,不会和其他服务产生库冲突,通过其高隔离的特性可以快速进行移植和部署;
- 安全性:容器之间相互隔离,互相之间互不影响,即使一台容器受到攻击,也不会影响其他容器的运行;
- 部署方便:搭建好开发环境后,可保存为镜像。需要使用时,直接使用镜像即可;
- 部署安全:保证了开发和生产环境的一致,避免出现“我的环境是好的”的问题;
2.2.容器缺点
- 网络数据和持久化磁盘数据由于是通过连接或映射实现的,因此对效率有一定的影响;
3.DOCKER部署安装
3.1.安装docker
sudo wget -qO- https://get.docker.com/ | sh
3.2.查看docker版本
docker version
3.3.开启和禁止开机服务自启动
sudo systemctl enable docker
sudo systemctl disable docker
3.4.启动和禁止服务
sudo systemctl start docker
sudo systemctl stop docker
4.DOCKER使用
4.1.镜像
4.1.1.镜像名称
格式:[Namespace]/[Repository]:[Tag]
说明:Namespace 镜像的命名空间,用于区别构建镜像的组织或个人Repository 镜像的档案名称,通常采用服务名称Tag 用来区别镜像服务版本
例子:“dockerPgm/test:01.01.01.01”和“dockerPgm:01.01.01.38”
4.1.1.镜像搜索
从DockerHub中搜索基本的镜像,用来创建容器。格式:docker search [OPTIONS] TERM
格式:docker search [OPTIONS] TERM
OPTIONS说明:-f filter Filter output based on conditions provided--format string 根据条件进行过滤输出--limit int 搜索结果的最大数量(默认为25个,最大100)--no-trunc 不要截断输出
例子:sudo docker search ubuntu
搜索结果
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 33
ubuntu/mysql MySQL open source fast, stable, multi-thread… 24
ubuntu/apache2 Apache, a secure & extensible open-source HT… 23
ubuntu/prometheus Prometheus is a systems and service monitori… 23
kasmweb/ubuntu-bionic-desktop Ubuntu productivity desktop for Kasm Workspa… 17
说明:NAME 名称DESCRJPTION 创建者提供的对镜像的简单描述。STARS 镜像在宫方镜像仓库中收到用户给出的星星的数量,表示镜像受欢迎的程度OFFICIAL 镜像是否由 Docker 官方提供AUTOMATED 镜像是否使用了自动构建
4.1.2. 镜像拉取
格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:-a, --all-tags 下载档案中所有TAG的镜像--disable-content-trust 跳过镜像验证(默认为true)--platform string 若服务支持多平台,则设置目标平台-q, --quiet 关闭冗余输出
例子:sudo docker pull ubuntu:20.04
4.1.3.镜像查看
格式:docker image ls [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:-a, --all 显示所有镜像(默认为隐藏中间镜像)--digests 显示数字-f, --filter filter 根据条件过滤输出--format string 使用使用一个Go模板来更好的列出镜像--no-trunc 不要截断输出-q, --quiet 只显示镜像ID
例子:sudo docker image ls
4.1.4.镜像删除
格式:docker image rm [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:-f, --force 强制移除镜像--no-prune 不要删除未带标记的父项例子:sudo docker image rm [镜像ID或名称]
4.1.5.镜像创建
Dockerfile是一个可自动创建Docker镜像的配置文件。那么我们首先需要创建一个Dockerfile文件,内容参考如下:
#格式:FROM image,FROM image:tag,FROM image@digest
#说明:FROM必须是第一个非注释指令。一个Dockerfile中可能有多个FROM,用来创建复合镜像,但需要在每个新的FROM命令之前,记录提交输出的最后一个镜像ID。
#例子:基于ubuntu:20.04构建镜像
FROM ubuntu:22.04#设置镜像的作者信息,可用于提供镜像的帮助,内容可以包括作者名称,邮件或帮助链接
MAINTAINER dockerPgm<dockerPgm@163.com>#格式:LABEL <key>=<value> [<key>=<value> ...]或LABEL <key>[ <value>]
#说明:可以使用docker inspect命令来查看镜像的标签信息
#功能:为镜像提供元数据
#LABEL com.example.vendor="ACME Incorporated"#格式:ARG [=]
#说明:构建镜像时,可在使用“--build-arg <varname>=<value>”传入参数,也可以定义时,赋予初始值。
#注意:不建议使用构建镜像时,命令传递密码数据,因为其他用户可以通过“docker history”查看到。Docker存在一些预定义ARG,如:HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy
#ARG DIR_HOME#格式:ENV <key> <value>
#说明:作用于构建的镜像和后续的容器(ENV定义的变量会覆盖ARG定义的变量),也可以在运行容器时使用“--env <key>=<value>”进行覆盖
ENV DIR_HOME="/dockerPgm/"#格式:WORKDIR /path/to/workdir
#说明:可以多次使用,如果使用相对路径,则相对上次的路径
#功能:设置工作目录
WORKDIR ${DIR_HOME}#格式:COPY <src> <dest>或COPY ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),不会在目的文件目录解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
#COPY dockerPgm/start.sh ${DIR_HOME}#格式:ADD <src> <dest>或ADD ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),将在目的文件目录进行解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
ADD dockerPgm/start.sh ${DIR_HOME}
ADD dockerPgm/test.pkg ${DIR_HOME}#格式:RUN <command> 或 RUN ["executable", "param1", "param2"]
#说明:构建镜像时,执行的指令
RUN bash ${DIR_HOME}/test.pkg#格式:EXPOSE <port> [<port>...]
#功能:通知DOCKER,容器运行时监听的端口
EXPOSE 10000#格式:VOLUME ["/data"]
#功能:创建和挂载数据卷,数据存储在主机的/var/lib/docker/volumes/dockerPgm_etc/_data目录
#VOLUME /etc/dockerPgm/#格式:USER [user | user:group | uid | uid:gid | user:gid | uid:group ]
#说明:默认用户为root。Dockerfile中可以多次设置,且只影响后续指令
#功能:设置用于运行后续命令的用户名或UID
#USER root#格式:ENTRYPOINT param1 param2 或 ENTRYPOINT ["executable", "param1", "param2"]
#说明:ENTRYPOINT中的参数无法被覆盖重写,但CMD的可以。可以在运行容器时,使用-d进行参数传递,当然也可以通过CMD指令进行传递
#功能:指明程序入口点
#ENTRYPOINT ["/usr/local/nginx/sbin/nginx"]#格式:CMD <command> 、CMD ["executable", "param1", "param2"]和CMD ["param1", "param2"]
#说明:CMD ["param1", "param2"]是为ENTRYPOINT提供默认参数。在Dockerfile文件中只有最后一个CMD生效;
#功能:为正在运行的容器提供默认值
CMD ${DIR_HOME}/start.sh#格式:STOPSIGNAL <signal>
#功能:停止容器时,Docker传递的停止信号,默认值SIGTERM。可以在docker-create和docker-run时,使用--stop-signal选项来重置该值
#STOPSIGNAL SIGKILL#格式:ONBUILD [INSTRUCTION]
#功能:当镜像作为构建其他进行的基础镜像时触发
创建start.sh文件,用于启动主进程:
#! /bin/bash
CURPATH=`pwd`
#启动NGINX
/usr/local/nginx/sbin/nginx &
#进入命令行
/bin/bash
构建镜像指令:
格式:docker build [OPTIONS] PATH | URL | -
OPTIONS说明:--add-host list 添加主机到IP映射--build-arg list 设置镜像构建时的ARG变量--cache-from strings 指定作为缓冲源的镜像--cgroup-parent string 指定容器的(可选)父组--compress 使用gzip压缩构建内容--cpu-period int 限制镜像CPU CFS周期--cpu-quota int 限制镜像CPU CFS配额-c, --cpu-shares int CPU共享(相对权重)--cpuset-cpus string 允许执行的CPU(0-3, 0,1)--cpuset-mems string 允许执行的mem(0-3, 0,1)--disable-content-trust 忽略镜像验证(默认为true)-f, --file string Dockerfile文件名称 (默认'PATH/Dockerfile')--force-rm 移除中间容器--iidfile string 写入镜像ID的文件--isolation string 容器隔离技术--label list 设置镜像的标签变量-m, --memory bytes 内存限制--memory-swap bytes 交换内存限制=内存+交换: '-1'表示关闭交换限制--network string 设定在镜像构建时,RUN指令的网络模式 (默认 "default")--no-cache 在构建映像时,请不要使用高速缓存--pull 尝试拉取一个最新版本的镜像-q, --quiet 抑制镜像构建过程的信息输出,并在构建成功时显示镜像ID--rm 构建成功后,删除中间容器 (默认true)--security-opt strings 安全选项--shm-size bytes 共享内存/dev/shm分区大小-t, --tag list 指定名称和标记格式,如'name:tag'--target string 设置构建阶段的目标--ulimit ulimit 限制选项 (默认 [])
例子:sudo docker build -f Dockerfile -t dockerPgm:01.01.01.38 .
4.1.6.镜像迁移
镜像导出(可以导出多个镜像)
sudo docker save -o dockerPgm.tar ubuntu:22.04 dockerPgm:01.01.01.38
镜像导入
sudo docker load -i dockerPgm.tar
4.1.7.Docker Hub登录
sudo docker login -u <username> -p <password> <server> server 默认采用 Docker Daemon 中的默认值。
4.1.8.docker image指令
格式:docker image COMMANDCommands选项:build 基于Dockerfile文件构建镜像history 显示镜像的构建历史信息import 从TAR包(tarball)中导入内容来创建一个文件系统镜像inspect 显示镜像的更详细信息load 从TAR包或STDIN中加载镜像ls 列出镜像prune 删除未使用的镜像pull 拉取一个镜像或档案push 推送一个镜像或档案rm 删除镜像save 将一个或多个镜像保存到TAR包文件 (默认硫化到STDOUT)tag 创建一个TAG
4.2.容器
4.2.1.容器创建
创建一个容器,但并不运行:容器名称为dockerPgm_db,基于镜像ubuntu:20.04,且挂载了/etc/dockerPgm和/usr/local/msresource两个数据卷,数据卷名称分别为dockerPgm_etc和msresource。使用数据卷可以将数据持久化到主机硬盘。
sudo docker create --name dockerPgm_db -v dockerPgm_etc:/etc/dockerPgm -v msresource:/usr/local/msresource ubuntu:20.04--name 定义被创建容器的名称;-v 创建数据卷,格式<名称>:<容器内路径>。若不指定名称,将随机分配一个64位的名称;
4.2.2.容器运行
创建并运行一个容器:容器名称为dockerPgm,基于镜像dockerPgm:01.01.01.38;对外开发端口为8070,8090,8010,8020,映射的端口为8070;使用数据卷容器dockerPgm_db;
sudo docker run -it --name dockerPgm -p:8070:8060 -p 8090:8090 -p 8010:8010 -p 8020:8020 --volumes-from dockerPgm_db dockerPgm:01.01.01.38-t 让 Docker 这个容器分配一个伪终端;-i 打开了交互模式;-d 让容器运行在后台;--name 定义被创建容器的名称;-p 指定端口映射<对外端口>:<容器内端口>--volumes-from 指定使用的数据卷容器
4.2.4.进入容器
sudo docker exec -it 容器名称|容器ID bash
4.2.4.容器退出
exit
4.2.4.容器查看
sudo docker ps无参数 列出正在运行的容器;-a 列出所有容器;-l 列出最后创建的容器;-n <n> 列出n个最近创建的容器;-f "key=value" 进行多种形式的过滤
4.2.5.容器删除
sudo docker rm -v [容器ID或名称]
4.2.6.启动和关闭容器
sudo docker start dockerPgm
sudo docker stop dockerPgm
sudo docker restart dockerPgm
4.2.7.暂停和恢复容器
sudo docker pause dockerPgm
sudo docker unpause dockerPgm
4.2.8.查看容器进程信息
sudo docker top dockerPgm
4.2.9.查看容器信息
sudo docker inspect dockerPgm
4.2.10.查看容器日志
sudo docker logs dockerPgm
4.2.11.衔接到容器
sudo docker attach dockerPgm
4.2.12.导出和导入容器
sudo docker export -o dockerPgm_con.tar dockerPgm
sudo import dockerPgm_con.tar dockerPgm
注意:导入的容器出现在本地镜像库里,还需要去创建和运行容器
4.2.13.提交容器变更
sudo docker commit -m "设置root的密码为XXXX" dockerPgm smartavs/dockerPgm:01