Docker 部署常见应用

Portainer

https://www.portainer.io/installation

docker volume create portainer_data
docker run --restart=always --name portainer \
-v portainer_data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8000:8000 -p 9443:9443 -d portainer/portainer-ce

数据卷默认路径:/var/lib/docker/volumes/portainer_data/_data

访问:https://127.0.0.1:9443

除了 portainer,也可使用 cadvisor + influxdb(prometheus) + grafna:https://github.com/google/cadvisor

 

MySQL

https://hub.docker.com/_/mysql

docker run --restart=always --name mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST=% -e TZ=Asia/Shanghai \
-p 3306:3306 -d mysql:latest

docker mysql 连接慢:https://dev.mysql.com/doc/refman/8.0/en/host-cache.html

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_skip_name_resolve

vim /opt/mysql/conf/config-file.cnf


[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
max_connections = 1000
default-time-zone = '+08:00'
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'
init_connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

查看帮助

docker run -it --rm mysql:latest --verbose --help

MYSQL_ROOT_PASSWORD:root 密码

MYSQL_ROOT_HOST:root 用户远程访问,% 表示任意地址

TZ:时区

其它可用环境变量:https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html

-v /opt/mysql/data:/var/lib/mysql:数据目录

-v /opt/mysql/conf:/etc/mysql/conf.d:配置目录,MySQL 实例从采用混合(/etc/mysql/my.cnf 和自定义配置)设置

--character-set-server=utf8mb4

--collation-server=utf8mb4_unicode_ci

 

MariaDB

docker run --name my-mariadb \
-v /opt/mariadb/conf:/etc/mysql/conf.d \
-v /opt/mariadb/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 -d mariadb:10.5.8 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

https://hub.docker.com/_/mariadb

 

RabbitMQ

docker run --restart=always -d --name rabbitmq --hostname my-rabbit \
-e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest \
-p 5672:5672 -p 15672:15672 \
-v /opt/rabbitmq:/var/lib/rabbitmq/mnesia \
rabbitmq:management-alpine

https://hub.docker.com/_/rabbitmq

 

Jenkins

https://www.jenkins.io/zh/doc/book/installing

https://www.jenkins.io/doc/book/installing/#installing-docker

# 创建网桥网络
docker network create jenkins
# 创建数据卷,持久化 Jenkins 数据
docker volume create jenkins-data

docker run \
  --name=jenkins \
  --restart=always \
  -u root \
  -d \
  -p 8090:8080 \
  -p 50000:50000 \
  -v /home/jenkins/data:/var/jenkins_home:Z \
  -v /home/jenkins/tools:/tools:Z \
  -v /var/run/docker.sock:/var/run/docker.sock:Z \
  jenkinsci/blueocean

https://www.jenkins.io/doc/book/installing/#setup-wizard

指定用户:--user $(id -u),默认用户为 guest

jenkins-data 数据卷默认路径:/var/lib/docker/volumes/jenkins-data/_data

 

ElasticSearch

IK 分词:https://github.com/medcl/elasticsearch-analysis-ik/releases

mkdir -p /opt/elasticsearch/config
mkdir -p /opt/elasticsearch/data
mkdir -p /opt/elasticsearch/plugins
echo "http.host: 0.0.0.0" >> /opt/elasticsearch/config/elasticsearch.yml
docker run --restart=always --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.9.3 docker run --restart=always --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.8.121:9200 -p 5601:5601 -d kibana:7.9.3

将 IK 分词插件解压后放置 /opt/elasticsearch/plugins 下,重启 ES 容器即可,注意 IK 版本要与 ES 版本对应

查看 IK 是否安装成功

# 查看 ES 容器 ID
docker ps
# 进入 ES 容器
docker exec -it 59a00c5f46cb /bin/bash
# 列出所有已安装插件
./bin/elasticsearch-plugin list
# 退出容器,不会关闭容器
exit

 

Redis

https://hub.docker.com/_/redis

mkdir -p /opt/redis/data
mkdir -p /opt/redis/conf
# touch /opt/redis/conf/redis.conf
echo "appendonly yes" >> /opt/redis/conf/redis.conf
# 要存在 /opt/redis/conf/redis.conf 文件
docker run --restart=always --name redis \
-v /opt/redis/data:/data \
-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \
-p 6379:6379 -d redis:alpine \
redis-server /etc/redis/redis.conf
# 连接 Redis
docker exec -it redis redis-cli
quit

 

Prometheus

docker run -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus prom/prometheus

/opt/prometheus/prometheus.yml

global:
  scrape_interval: 60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: 'spis'
    scrape_interval: 60s
    scrape_timeout: 10s
    metrics_path: '/spis/actuator/prometheus'
    static_configs:
      - targets: ['xxx:80','xxx:8080']

http://xxx:9090/targets

 

Grafana

docker run -d -p 3000:3000 --name grafana -v /opt/grafana:/var/lib/grafana grafana/grafana

默认用户名密码都是 admin,第一次登录后需要设置新密码

https://www.cnblogs.com/larrydpk/p/12563497.html

https://grafana.com/grafana/dashboards

 

Nexus3

mkdir /opt/nexus3 && chown -R 200 /opt/nexus3
docker run -d -p 8081:8081  --restart=always --name nexus3 -v /opt/nexus3:/nexus-data sonatype/nexus3

用户名:admin,密码:docker exec -it nexus3 cat /nexus-data/admin.password

https://hub.docker.com/r/sonatype/nexus3

配置 maven 程序中的 settings.xml

  <server>
    <id>xxx-xxx</id> <!-- 随意 -->
    <username>admin</username>
    <password>admin</password>
  </server>
</servers>

配置要上传 jar 包项目中的 pom.xml,执行 deploy 就会上传

<distributionManagement>
    <repository>
        <!--这里的 id 需要和 settings.xml 中 server 的 id 一致-->
        <id>xxx-xxx</id>
        <url>http://xxx.xxx.xxx.xxx:8081/repository/xxx-xxx</url>
    </repository>
</distributionManagement>

配置要使用 jar 包中的 pom.xml

<repositories>
    <repository>
        <id>xxx-xxx</id>
        <url>http://xxx.xxx.xxx.xxx:8081/repository/xxx-xxx</url>
    </repository>
</repositories>

https://blog.csdn.net/mytt_10566/article/details/78966577

 

Tomcat

https://registry.hub.docker.com/_/tomcat

docker run -d -p 8888:8080 \
-v /home/dsw/docker/tomcat/logs/:/usr/local/tomcat/logs/ \
-v /home/dsw/docker/tomcat/webapps/:/usr/local/tomcat/webapps/ \
tomcat:9.0

容器内安装 vim

docker exec -it --user root xxxxxxxx /bin/bash

cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list
sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
apt-get update
apt-get install vim

manager-gui 配置:https://www.cnblogs.com/jhxxb/p/11240356.html

 

Oracle DataBase

https://hub.docker.com/r/loliconneko/oracle-ee-11g

docker run --restart=always --name oracle-11g \
-v /home/dsw/oracle:/u01/app/oracle \
-e WEB_CONSOLE=false \
-e DBCA_TOTAL_MEMORY=4096 \
-p 1521:1521 \
-d loliconneko/oracle-ee-11g

连接信息

hostname: localhost
port: 1521
sid: EE
service name: EE.oracle.docker
username: system
password: oracle

https://hub.docker.com/r/gvenzl/oracle-xe

docker run --restart=always --name oracle-11g \
-e ORACLE_PASSWORD=oracle \
-p 1521:1521 \
-d gvenzl/oracle-xe:11-slim

连接信息

hostname: localhost
port: 1521
sid: XE
service name: XE
username: sys
password: oracle

也可自己构建镜像:https://www.cnblogs.com/jhxxb/p/14991326.html

构建好的 11g:docker pull registry.cn-hangzhou.aliyuncs.com/tricking/oracle_database:11.2.0.2-xe

 

运行 Java 应用

构建 oracle java 镜像:https://github.com/oracle/docker-images/tree/main/OracleJava

构建好的 java8:docker pull registry.cn-hangzhou.aliyuncs.com/tricking/oracle_java:8-oraclelinux7

与构建 oracle database 类似:https://www.cnblogs.com/jhxxb/p/14991326.html

docker run -d --restart=always --name springboot \
-v /opt/springboot:/java \
-p 9000:9000 \
oracle/serverjre:8-oraclelinux7 \
java -Dspring.profiles.active=dev -Dserver.port=9000 -Dlogging.file.name=/java/logs/file.log -jar /java/springboot.jar

 

gitlab

https://docs.gitlab.com/ee/install/docker.html

sudo docker run --detach \
--hostname 10.74.2.72 \
--publish 7003:443 --publish 7001:80 --publish 7002:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
gitlab/gitlab-ee:latest

查看日志及密码

sudo docker logs -f gitlab
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

 

Janus

从源码构建:https://github.com/canyanio/janus-gateway-docker

Dockerfile,这里添加了 --enable-docs,构建时需要安装 doxygen 和 graphviz

FROM debian:bullseye-slim
RUN sed -i "s@http://\(deb\|security\).debian.org@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
RUN apt-get -y update && \
    apt-get install -y \
        libavutil-dev \
        libavformat-dev \
        libavcodec-dev \
        libmicrohttpd-dev \
        libjansson-dev \
        libssl-dev \
        libsofia-sip-ua-dev \
        libglib2.0-dev \
        libopus-dev \
        libogg-dev \
        libcurl4-openssl-dev \
        liblua5.3-dev \
        libconfig-dev \
        libusrsctp-dev \
        libwebsockets-dev \
        libnanomsg-dev \
        librabbitmq-dev \
        pkg-config \
        gengetopt \
        libtool \
        automake \
        build-essential \
        wget \
        git doxygen graphviz \
        gtk-doc-tools && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


RUN cd /tmp && \
    wget https://github.do/https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
    tar xfv v2.3.0.tar.gz && \
    cd libsrtp-2.3.0 && \
    ./configure --prefix=/usr --enable-openssl && \
    make shared_library && \
    make install

RUN cd /tmp && \
    git clone https://ghproxy.fsofso.com/https://github.com/libnice/libnice.git && \
    cd libnice && \
    git checkout 0.1.17 && \
    ./autogen.sh && \
    ./configure --prefix=/usr && \
    make && \
    make install

COPY . /usr/local/src/janus-gateway

RUN cd /usr/local/src/janus-gateway && \
    sh autogen.sh && \
    ./configure --enable-post-processing --enable-docs --prefix=/usr/local && \
    make && \
    make install && \
    make configs

RUN ls -l /usr/local/src/janus-gateway

FROM debian:bullseye-slim
RUN sed -i "s@http://\(deb\|security\).debian.org@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list

RUN apt-get -y update && \
    apt-get install -y \
        libmicrohttpd12 \
        libavutil-dev \
        libavformat-dev \
        libavcodec-dev \
        libjansson4 \
        libssl1.1 \
        libsofia-sip-ua0 \
        libglib2.0-0 \
        libopus0 \
        libogg0 \
        libcurl4 \
        liblua5.3-0 \
        libconfig9 \
        libusrsctp1 \
        libwebsockets16 \
        libnanomsg5 \
        librabbitmq4 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY --from=0 /usr/lib/libsrtp2.so.1 /usr/lib/libsrtp2.so.1
RUN ln -s /usr/lib/libsrtp2.so.1 /usr/lib/libsrtp2.so

COPY --from=0 /usr/lib/libnice.la /usr/lib/libnice.la
COPY --from=0 /usr/lib/libnice.so.10.10.0 /usr/lib/libnice.so.10.10.0
RUN ln -s /usr/lib/libnice.so.10.10.0 /usr/lib/libnice.so.10
RUN ln -s /usr/lib/libnice.so.10.10.0 /usr/lib/libnice.so

COPY --from=0 /usr/local/bin/janus /usr/local/bin/janus
COPY --from=0 /usr/local/bin/janus-pp-rec /usr/local/bin/janus-pp-rec
COPY --from=0 /usr/local/bin/janus-cfgconv /usr/local/bin/janus-cfgconv
COPY --from=0 /usr/local/etc/janus /usr/local/etc/janus
COPY --from=0 /usr/local/lib/janus /usr/local/lib/janus
COPY --from=0 /usr/local/share/janus /usr/local/share/janus
COPY --from=0 /usr/local/share/doc/janus-gateway/janus-gateway-1.0.1/html /usr/local/share/janus/demos/docs

EXPOSE 10000-10200/udp
EXPOSE 8188
EXPOSE 8088
EXPOSE 8089
EXPOSE 8889
EXPOSE 8000
EXPOSE 7088
EXPOSE 7089

CMD ["/usr/local/bin/janus"]
View Code

构建

git clone --branch master --depth 1 https://github.com/meetecho/janus-gateway.git
find . -type f -print0 | xargs -0 dos2unix
docker build -f ../Dockerfile -t canyan/janus-gateway:master .

从 https://hub.docker.com/r/canyan/janus-gateway 构建

nginx.conf

events {
}

http {
    include /etc/nginx/mime.types;

    server {
        listen 80;
        rewrite ^(.*)$ https://$host$1 permanent;
    }

    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    server {
        listen 443 ssl;
        ssl_certificate /cert/server.crt;
        ssl_certificate_key /cert/server.key;

        location / {
            root /usr/local/share/janus/demos;
            index index.html index.htm;
        }

        location ~ /.*\.(bmp|gif|jpg|png|css|js|cur|flv|ico|swf|doc|pdf|html)$ {
            root /usr/local/share/janus/demos;
            expires 1d;
        }

        location /janus {
            proxy_pass http://127.0.0.1:8088/janus;
        }

        location /admin {
            proxy_pass http://127.0.0.1:7088/admin;
        }

        location /ws {
            proxy_pass http://127.0.0.1:8188;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }
}
View Code

Dockerfile

FROM canyan/janus-gateway:master
RUN sed -i "s@http://\(deb\|security\).debian.org@http://mirrors.163.com@g" /etc/apt/sources.list
RUN apt-get update && apt-get install -y curl

# https://janus.conf.meetecho.com
RUN mkdir -p /usr/local/share/janus/demos/js/ /usr/local/share/janus/demos/fonts/
RUN curl https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0 -o /usr/local/share/janus/demos/fonts/fontawesome-webfont.woff2
RUN curl https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/cerulean/bootstrap.min.css -o /usr/local/share/janus/demos/css/bootstrap.min.css
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/bootswatch/.*/cerulean/bootstrap.min.css@/css/bootstrap.min.css@g `grep bootstrap.min.css -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js -o /usr/local/share/janus/demos/js/bootstrap.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/.*/js/bootstrap.min.js@/js/bootstrap.min.js@g `grep bootstrap.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js -o /usr/local/share/janus/demos/js/jquery.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/jquery/.*/jquery.min.js@/js/jquery.min.js@g `grep jquery.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/webrtc-adapter/8.1.1/adapter.min.js -o /usr/local/share/janus/demos/js/adapter.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/webrtc-adapter/8.1.1/adapter.min.js@/js/adapter.min.js@g `grep adapter.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css -o /usr/local/share/janus/demos/css/font-awesome.min.css
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css@/css/font-awesome.min.css@g `grep font-awesome.min.css -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/jquery.blockUI/2.70/jquery.blockUI.min.js -o /usr/local/share/janus/demos/js/jquery.blockUI.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/jquery.blockUI/2.70/jquery.blockUI.min.js@/js/jquery.blockUI.min.js@g `grep jquery.blockUI.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js -o /usr/local/share/janus/demos/js/bootbox.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js@/js/bootbox.min.js@g `grep bootbox.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.min.js -o /usr/local/share/janus/demos/js/spin.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.min.js@/js/spin.min.js@g `grep spin.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.js -o /usr/local/share/janus/demos/js/toastr.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.js@/js/toastr.min.js@g `grep toastr.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css -o /usr/local/share/janus/demos/css/toastr.min.css
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css@/css/toastr.min.css@g `grep toastr.min.css -rl --include="*.html" /usr/local/share/janus/demos/`
RUN curl https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.6.0/js/md5.min.js -o /usr/local/share/janus/demos/js/md5.min.js
RUN sed -i s@https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.6.0/js/md5.min.js@/js/md5.min.js@g `grep md5.min.js -rl --include="*.html" /usr/local/share/janus/demos/`
RUN sed -i s@'a href="'@'a href="/'@g /usr/local/share/janus/demos/navbar.html
RUN sed -i s@'href="/http'@'href="http'@g /usr/local/share/janus/demos/navbar.html
RUN sed -i s@meetecho-logo.png@/meetecho-logo.png@g /usr/local/share/janus/demos/navbar.html
RUN sed -i s@'href="https://janus.conf.meetecho.com'@'href="'@g /usr/local/share/janus/demos/docs/index.html
RUN curl https://s3.amazonaws.com/github/ribbons/forkme_left_darkblue_121621.png -o /usr/local/share/janus/demos/forkme_left_darkblue_121621.png
RUN sed -i s@https://s3.amazonaws.com/github/ribbons/forkme_left_darkblue_121621.png@/forkme_left_darkblue_121621.png@g `grep forkme_left_darkblue_121621.png -rl --include="*.html" /usr/local/share/janus/demos/`

RUN sed -i s@:8088/janus@/janus@g `grep :8088/janus -rl --include="*.js" /usr/local/share/janus/demos/`
RUN sed -i s@:8089/janus@/janus@g `grep :8089/janus -rl --include="*.js" /usr/local/share/janus/demos/`
RUN sed -i s@:7088/admin@/admin@g /usr/local/share/janus/demos/admin.js
RUN sed -i s@:7889/admin@/admin@g /usr/local/share/janus/demos/admin.js

# COPY conf/*.jcfg /usr/local/etc/janus/
#RUN sed -i s@'https = false'@'https = true'@g /usr/local/etc/janus/janus.transport.http.jcfg
RUN sed -i s@'admin_http = false'@'admin_http = true'@g /usr/local/etc/janus/janus.transport.http.jcfg
#RUN sed -i s@'admin_https = false'@'admin_https = true'@g /usr/local/etc/janus/janus.transport.http.jcfg
#RUN sed -i s@'#cert_pem = "/path/to/cert.pem"'@'cert_pem = "/cert/server.crt"'@g /usr/local/etc/janus/janus.transport.http.jcfg
#RUN sed -i s@'#cert_key = "/path/to/key.pem"'@'cert_key = "/cert/server.key"'@g /usr/local/etc/janus/janus.transport.http.jcfg
#RUN sed -i s@'wss = false'@'wss = true'@g /usr/local/etc/janus/janus.transport.websockets.jcfg
#RUN sed -i s@'admin_ws = false'@'admin_ws = true'@g /usr/local/etc/janus/janus.transport.websockets.jcfg
#RUN sed -i s@'admin_wss = false'@'admin_wss = true'@g /usr/local/etc/janus/janus.transport.websockets.jcfg
#RUN sed -i s@'#cert_pem = "/path/to/cert.pem"'@'cert_pem = "/cert/server.crt"'@g /usr/local/etc/janus/janus.transport.websockets.jcfg
#RUN sed -i s@'#cert_key = "/path/to/key.pem"'@'cert_key = "/cert/server.key"'@g /usr/local/etc/janus/janus.transport.websockets.jcfg

RUN mkdir /cert && openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /cert/server.key -out /cert/server.crt -subj "/C=CN/ST=hubei/L=wuhan/O=janus/OU=janus/CN=janus.com"

FROM canyan/janus-gateway:master
COPY --from=0 /cert /cert
COPY --from=0 /usr/local/etc/janus /usr/local/etc/janus
COPY --from=0 /usr/local/share/janus/demos /usr/local/share/janus/demos
RUN sed -i "s@http://\(deb\|security\).debian.org@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
COPY nginx.conf /etc/nginx/nginx-janus.conf
CMD nginx -c /etc/nginx/nginx-janus.conf && /usr/local/bin/janus -F /usr/local/etc/janus
View Code

构建运行

docker rm -f myjanus && docker build -t myjanus . && docker run --rm --name myjanus -d -p 443:443 -p 80:80 myjanus
# 将 127.0.0.1 改为自己的宿主机 ip
docker exec -it myjanus sed -i s@'#nat_1_1_mapping = "1.2.3.4"'@'nat_1_1_mapping = "127.0.0.1"'@g /usr/local/etc/janus/janus.jcfg && docker restart myjanus

docker-compose.yaml,将其中 127.0.0.1 改为自己的宿主机 ip

version: '3.8'
services:
  janus:
    image: myjanus
    container_name: janus
    ports:
      - "443:443"
    restart: always
    command:
      - sh
      - -c
      - |
          nginx -c /etc/nginx/nginx-janus.conf &
          /usr/local/bin/janus -F /usr/local/etc/janus -1 127.0.0.1
View Code

若在使用过程中出现下面错误:

ICE failed for component 1 in stream 1, but let's give it some time... (trickle pending, answer received, alert not set)

ICE failed for component 1 in stream 1, but we're still waiting for some info so we don't care... (trickle pending, answer received, alert not set)

在 docker-compose.yaml 中去掉端口映射,添加 network_mode: host,避免 NAT 转换。

或安装 STUN/TURN 服务:https://hub.docker.com/r/coturn/coturn & https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice

docker run --restart=always -d --name coturn --network host coturn/coturn --external-ip='外网ip' --user='username:password' --realm=my.realm.org

最后把 STUN 和 TURN 信息配置到 Janus 中

posted @ 2020-07-07 09:15  江湖小小白  阅读(1284)  评论(0编辑  收藏  举报