docker/Dockerfile/docker compose

这篇具有很好参考价值的文章主要介绍了docker/Dockerfile/docker compose。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安装docker

https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/

在x86环境下,由容器统一管理开发及运行环境。

Docker

https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/

安装Docker-CE

#官方docker源(被墙),不推荐
#sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#清华docker源,推荐
sudo add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update
sudo apt-get install -y docker-ce --allow-unauthenticated
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker

检查Docker安装状态

sudo dockerd 手动启动docker

sudo service docker start 后台启动docker

zyx@DESKTOP-3QJ3KNF:~$ docker version
Client: Docker Engine - Community
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:02:46 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
// 这里没出现什么报错就是正常了 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Server: Docker Engine - Community
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:00:51 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
sudo service docker status
sudo docker run hello-world

sudo dockerd 显示启动docker,看日志中的docker /var/log/docker.log

错误0 The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

错误1 cannot connect to the docker daemon at unix ///var/run/docker.sock. Is the docker daemon running?

docker没启动成功,看日志,有可能是wsl2没更新成功,先看这个问题

错误2 iptables/1.8.2 Failed to initialize nft: Protocol not supported

可能需要重启一下内核

iptables/1.8.2 Failed to initialize nft: Protocol not supported

错误3 iptables v1.8.7 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATION-STAGE-1

failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain: (iptables failed: iptables --wait -A DOCKER-ISOLATION-STAGE-1 -j RETURN: iptables v1.8.7 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATION-STAGE-1

https://blog.csdn.net/0210/article/details/124349371

sudo update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
 
  Selection    Path                       Priority   Status
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        auto mode
  1            /usr/sbin/iptables-legacy   10        manual mode
  2            /usr/sbin/iptables-nft      20        manual mode
 
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode

docker基本命令

查看镜像

docker images

// 查看下载到计算机的镜像
//当镜像执行时,它会生成一个容器,我们在容器中添加所需的软件后,可以把这个容器再次打包成新镜像。并可以把这个镜像上传到 Docker hub 上

// 在容器中更改文件只会修改容器中的,不会修改镜像

运行交互式的容器

docker run -it ubuntu:15.10 /bin/bash

  • -t 在新容器内指定一个伪终端或终端
  • -i 允许你对容器内的标准输入 (STDIN) 进行交互

启动容器(后台模式)

docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”

faecb4f2ec1b07065c35a187897145dbf7e833ce0be4d881fd12dff970257197

  • -d 后台启动docker

docker stop cid

docker ps -a

docker stop cid

docker restart cid

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

导入导出容器

docker export 1e560fca3906 > dk_test.tar

docker import dk_test.tar dk_test:v1 //对导入的镜像文件指定REPO:TAG

运行一个web应用

docker pull training/webapp

Docker 容器互联

docker network create -d bridge test-net
docker network ls

运行一个容器并连接到新建的 test-net 网络:

docker run -itd --name test1 --network test-net ubuntu /bin/bash

Dockerfile

FROM:定制的镜像都是基于 FROM 的镜像

RUN

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

COPY 从上下文目录中复制文件或者目录到容器里指定路径。

ADD

ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build

为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

# $ docker run  nginx:test  //docker run  nginx:test -c /etc/nginx/new.conf

ENV

ARG

EXPOSE

仅仅是声明端口

Dockerfile

Dockerfile 基本操作 https://www.runoob.com/docker/docker-dockerfile.html

docker compose

docker compose 基本操作 https://www.runoob.com/docker/docker-compose.html

流媒体服务器

1 docker中启动zlmeidiakit服务器

cd /home/zyx/deploy/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hM58aQaH-1674922385308)(.assets/16748926838361.png)]

确保ZLMediaKit的docker服务有正常运行;

涉及指令:docker-compose -f docker-compose-run.yml start (启动)

​ docker-compose -f docker-compose-run.yml stop (停止)

​ docker-compose -f docker-compose-run.yml restart (重启)

实战

工作中需要把zlMediaKit的服务器在docker中部署,同时最好编译docker时,流媒体服务器仍能提供服务。分成两部分来执行。

Dockerfile

Dockerfile.build

FROM ubuntu:20.04 AS build
WORKDIR /opt/media/


# ADD sources.list /etc/apt/sources.list
RUN sed -i s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g /etc/apt/sources.list
RUN sed -i s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g /etc/apt/sources.list

RUN apt-get update && \
         DEBIAN_FRONTEND="noninteractive" \
         apt-get install -y --no-install-recommends \
         build-essential \
         cmake \
         git \
         curl \
         vim \
         wget \
         ca-certificates \
         tzdata \
         libssl-dev \
         libmysqlclient-dev \
         libx264-dev \
         libfaac-dev \
         gcc \
         g++ \
         libavcodec-dev libavutil-dev libswscale-dev libresample-dev \
         gdb && \
         apt-get autoremove -y && \
         apt-get clean -y && \
         wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz -O libsrtp-2.2.0.tar.gz && tar xfv libsrtp-2.2.0.tar.gz && \
         cd libsrtp-2.2.0 && ./configure --enable-openssl && make -j $(nproc) && make install && \
    rm -rf /var/lib/apt/lists/* 
# 删除本地的软件包列表:rm -rf /var/lib/apt/lists/* 为了不占用资源
# https://blog.csdn.net/asasd101/article/details/110252584 减小Docker镜像大小的方法

Dockerfile.run

FROM ubuntu:20.04
WORKDIR /opt/media/bin/
USER 0:0
ENV PATH $PATH:/opt/media/bin

#暴露哪些端口
EXPOSE 1935/tcp
EXPOSE 554/tcp
EXPOSE 332/tcp
EXPOSE 80/tcp
EXPOSE 443/tcp
EXPOSE 10000/udp
EXPOSE 10000/tcp
EXPOSE 8000/udp
EXPOSE 9000/udp
EXPOSE 50000-60000/udp
EXPOSE 50000/udp
EXPOSE 50002/udp

# ADD sources.list /etc/apt/sources.list
#RUN sed -i s@http://.*archive.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g /etc/apt/sources.list
#RUN sed -i s@http://.*security.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g /etc/apt/sources.list
RUN sed -i s@archive.ubuntu.com@mirrors.aliyun.com@g /etc/apt/sources.list
RUN sed -i s@security.ubuntu.com@mirrors.aliyun.com@g /etc/apt/sources.list

RUN apt-get update && \
         DEBIAN_FRONTEND="noninteractive" \
         apt-get install -y --no-install-recommends \
         vim \
         wget \
         ca-certificates \
         tzdata \
         curl \
         libssl-dev \
         libx264-dev \
         libfaac-dev \
         ffmpeg \
         gcc \
         g++ \
         libavcodec-dev libavutil-dev libswscale-dev libresample-dev \
         gdb && \
         apt-get autoremove -y && \
         apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

# 默认容器使用UTC时间,跟本地时间相差8个小时,在查看日志的时候时间偏差
ENV TZ=Asia/Shanghai  
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
        && echo $TZ > /etc/timezone


# FROM- 镜像从那里来
# MAINTAINER- 镜像维护者信息
# RUN- 构建镜像执行的命令,每一次RUN都会构建一层
# CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
# VOLUME- 定义数据卷,如果没有定义则使用默认
# USER- 指定后续执行的用户组和用户
# WORKDIR- 切换当前执行的工作目录
# HEALTHCHECH- 健康检测指令
# ARG- 变量属性值,但不在容器内部起作用
# EXPOSE- 暴露端口
# ENV- 变量属性值,容器内部也会起作用
# ADD- 添加文件,如果是压缩文件也解压
# COPY- 添加文件,以复制的形式
# ENTRYPOINT- 容器进入时执行的命令

compose yaml

build.yaml

version: '3'
services:                                        # 要启动什么服务
  mediabuilder:                                    # 服务名字:mediabuilder
    container_name: mediabuilder                   # 容器名字 指定自定义容器名称mediaserver,而不是生成的默认名称。
    build:                                         # 构建方式 指定为构建镜像上下文路径
      context: ./
      dockerfile: Dockerfile.build                   # 在 ./ 目录下执行 Dockerfile.run指定的镜像
    networks:                                      # 配置容器连接的网络,引用顶级 networks 下的条目 
      media_net:
        ipv4_address: 192.168.1.10
    volumes:                                       # 挂载对应映射
      - ./code:/opt/media/code
    command: [ "sh", "/opt/media/code/build.sh" ]  # 启动时执行

networks:                                      # 顶级networks
  media_net:
    ipam:
      driver: default
      config:
        - subnet: 192.168.0.0/16  
# https://docs.docker.com/compose/compose-file/#ipam 网络相关设置

run.yaml

version: '3'
services:                               # 要启动什么服务
  mediaserver:                            # 服务名字 mediaserver
    container_name: mediaserver           # 容器名字 指定自定义容器名称mediaserver,而不是生成的默认名称。
    build:                                # 构建方式 指定为构建镜像上下文路径
      context: ./                            # 在 ./ 目录下执行 Dockerfile.run指定的镜像
      dockerfile: Dockerfile.run
    restart: always                     # 容器的重启策略 no/always/on-failure/unless-stopped(在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器)
    ports:                              # 宿主机端口:容器的端口
      - "8554:554"
      - "8443:443"
      - "4332:332"	
      - "1935:1935"
      - "8088:80"
      - "10000:10000"
      - "50000:50000"
      - "50002:50002"
      - "50000-60000:50000-60000"
    volumes:                            # 挂载到容器
      - ./bin:/opt/media/bin              # 将主机的数据卷或文件挂载到容器里。
    command: [ "sh", "/opt/media/bin/start.sh" ] # 容器启动时的指令

shell

build.sh

#!/bin/bash
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) # 无论在哪里执行该脚本,都能到正确的路径
# 在容器映射路径下的编译指令
cd /opt/media/code/ZLMediaKit && \
    rm -fr build release && \
    mkdir -p build release/linux/Release/ && \
    cd build && \
    cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_WEBRTC=false -DENABLE_FFMPEG=true -DENABLE_TESTS=false -DENABLE_API=true .. && \
    make -j $(nproc)

start.sh

#!/bin/bash
# 在哪里都能进入脚本所在的路径
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)

chmod 755 MediaServer

# 执行对应的可执行文件
./MediaServer -s ssl.pem -c config.ini  >> start.log 2>&1

#while true; do sleep 10; done

deploy.sh

通过该脚本,将编译和运行耦合起来文章来源地址https://www.toymoban.com/news/detail-479971.html

#!/bin/sh
# 把编译好的放入可执行路径下
cp -fr code/ZLMediaKit/release/linux/Release/MediaServer bin/
cp -fr code/ZLMediaKit/release/linux/Release/default.pem bin/
cp -fr code/ZLMediaKit/release/linux/Release/config.ini bin/conf/
cp -fr code/ZLMediaKit/release/linux/Release/www/* bin/www/

到了这里,关于docker/Dockerfile/docker compose的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker Dockerfile Docker-compose学习笔记

    Docker目前支持Centos7及以后的版本。64位操作系统,内核版本至少为3.10 安装软件源,以及devicemapper存储类型 添加Docker yum源 安装Docker 启动Docker 测试是否能获取镜像 查看获取的镜像 生效配置信息 安装Docker需要保证你的电脑开启虚拟化 进入任务管理器→点击性能→看一下CPU是

    2024年02月12日
    浏览(36)
  • docker-compose:Dockerfile参数以及说明

    选择基础镜像,docker当前要生成的镜像以哪个镜像为基础。 容器 构建时 需要运行的命令(区别于后面的 CMD ) 有两种格式: shell命令格式 exec 格式 容器启动之后 要运行的命令 注意 CMD 一个文件中只能有一条指令 Dockerfile 。如果您列出多个, CMD 则只有最后一个会生效。 三种格

    2024年01月16日
    浏览(33)
  • 使用dockerfile以及docker compose部署搭建wordpress平台

    Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像的指令。它描述了镜像的构建过程,包括基础镜像、安装的软件、配置信息等。   Dockerfile 以指令的形式定义了构建镜像的步骤,每一行指令都是一个独立的步骤。这些指令可以包括从官方仓库获取基础镜像、运行命令、添

    2024年02月22日
    浏览(40)
  • Dockerfile与docker-compose容器编排(Docker系列第3章,共3章)

    不同的组件需要不同的docker配置(例如容器卷,端口,环境变量等),使用你懂得工具看hub.docker.com官方手册。 不要死记硬背,因为这种东西不是天天要写,过段时间就忘了,很容易引起挫败感。 Dockerfile或者Docker-compose的编写,可以安装一些编辑器插件辅助编写。 非官方中

    2024年04月15日
    浏览(33)
  • 启动docker容器的几种方法和注意事项(docker-compose,dockerfile)

    注意使用挂载命令volumes的时候,类似文件挂载可以这样写 表示宿主机docker-compose.yml当前目录下的/target/poi.jar文件挂载到容器默认目录app下 (如果是通过命令docker run -d -p 8088:8088 -v ./target/poi.jar:./app/,这样启动容器有两个报错,第一个是这样必须写绝对路径,不能写相对路径

    2024年02月11日
    浏览(37)
  • 【jenkins】idea+jenkins+docker+dockerfile+compose流水线部署java应用

    目录 整体架构 环境准备 安装docker以及docker-compose jenkins安裝 maven安装 portainer面板安装 sonarqube安装  在项目中增加dockerfile和compose.yml脚本  Dockerfile脚本内容 compose.yml脚本内容 jenkins安装必要插件 jenkins增加流水线任务 增加pipeline任务job  增加pipeline脚本 WXWork Notification Plugin 

    2024年02月16日
    浏览(50)
  • Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

    Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享: 数据持久化 :容器自身是易失的,当容器被删除时,存储在容器内部的数据也

    2024年02月21日
    浏览(36)
  • 微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本

    docker环境变量文件 如果定义的环境变量名与宿主机的一样,则优先宿主机上的。 部署脚本deploy.sh 批量复制文件到对应目录copy.sh

    2024年02月11日
    浏览(30)
  • 【docker-compose】【nginx】内网环境https配置

    在部署服务器上,新建cert目录,执行以下指令,然后生成.crt和.key文件 -days 3650:设置为10年 10.1.58.5:修改为服务器ip 在原来的配置上新增ssl配置,可使用任意端口, listen 后注意增加 ssl 为了便于前端vue项目容器化部署,将服务器 cert 目录与容器内 /etc/nginx/cert 关联

    2024年01月16日
    浏览(32)
  • docker、docker-compose、Https部署Minio,去除Minio文件过期时间教程

    系统:CentOS7 Docker:v24.0.7 DockerCompose:v2.23.1 Docker Minio镜像 minio/minio:RELEASE.2022-04-16T04-26-02Z ,版本再高一些的上传文件后服务器保存的不是xxx.png格式的图片,而是一个以图片名命名的目录,里面是一些看不懂的文件。不知道新版本怎么改能正常显示图片。 如果Https部署,需要

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包