💠

💠 2024-04-15 11:04:31


Docker应用

https://docs.docker.com/samples/
Docker Hub: explore

如何创建尽可能小的Docker容器教程 参考: 一次 Docker 容器内大量僵死进程排查分析

个人镜像

百度云

  • 配置好SSH服务器的 alpine 3.6 | docker hub地址 | 百度镜像源: hub.baidubce.com/mythos/alpine-ssh:1.0

    1. docker run --name sshd -p 8989:22 hub.baidubce.com/mythos/alpine-ssh:1.0
    2. 设置root用户密码 docker exec -it sshd passwd
    3. 登录 ssh -p 8989 root@localhost
  • Jenkins 镜像 hub.baidubce.com/mythos/jenkins:2.138.1

  • protobuf的编译环境以及2.5的源码在内 hub.baidubce.com/mythos/protoc-alpine-src:2.5

    • protobuf 的 Alpine 的 2.5版本 hub.baidubce.com/mythos/protoc-alpine:2.5
    • protobuf 的 Ubuntu 的 2.5版本 hub.baidubce.com/mythos/protoc:2.5
    • protobuf 的 Alpine 的 3.5.1版本 hub.baidubce.com/mythos/protoc-alpine:3.5.1

Linux发行版

只适合自己折腾, 不应该用于应用的镜像, 应用不该开放ssh

Ubuntu-ssh

  • 最为简单的是:docker run -i -t --name ubuntu17 -p 34433:22 ubuntu /bin/bash
    • 为这些软件预留端口 ssh tomcat mysql postgresql mysql oracle nginx reids
    • 直接跑一个Ubuntu出来,预留出要用的端口,容器运行不会退出
    • 进终端之后就 apt update 才能安装软件,现在才知道这个命令的重要性
  • 现在的问题是:能不能在已经运行的容器中添加端口映射??要是用到途中发现端口少了就麻烦了,解决方法可以是commit成镜像再跑出一个容器出来,
  • 最好是一个服务(应用)一个容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FROM ubuntu
ENV DEBIAN_FRONTEND noninteractive

ADD id_rsa.pub /root/.ssh/authorized_keys

RUN apt-get update; \
    apt-get install -y apt-utils debconf-utils iputils-ping wget curl htop ssh tini;

RUN chmod 700 /root/.ssh; \
    chmod 600 /root/.ssh/authorized_keys;

ENTRYPOINT ["/usr/bin/tini", "--"]

EXPOSE 22
  1. mkdir tmp && cd tmp && cp ~/.ssh/id_rsa.pub . 复制公钥
  2. docker build . -t myth:ssh 构建镜像
  3. docker run -i -t --name myth -p 30001:22 myth:ssh /bin/bash
  4. docker start myth 每次启动容器需要手动执行 service ssh start

Alpine-ssh

Centos-ssh


Java

Tips

  1. docker run 时加上 --cap-add=SYS_PTRACE 解决 jmap -heap 1 时报错: Can’t attach to the process: ptrace

  2. 参考: 使用Docker 实现微服务并搭建博客,一文全掌握。

Local

env.sh

1
2
3
4
JAVA_HOME=/path/to
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
FROM myth:ssh

ADD *.tgz jdk.tgz
ADD env.sh
RUN apt install vim unzip ; \
    cat env.sh >> /root/.bashrc;

EXPOSE 22

ENTRYPOINT ["/usr/bin/tini", "--"]

Jib

参考: GOOGLE JIB | Github:jib

NodeJs


中间件


数据库

PostgreSQL

Oracle

oracle/docker-images: Official source of container configurations, images, and examples for Oracle products and projects

MySQL

  • Docker hub: Mysql

  • 简单启动 docker run --name some-mysql -p 3360:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

    • 容器中默认配置文件为 /etc/mysql/conf.d/docker.cnf
  • 或者挂载自定义配置文件 主要是配置编码 以及设定时区

    • docker run --name mysql-5.7 -v 配置文件目录:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=mythos1104 -e TZ=Asia/Shanghai -p 3360:3306 -d mysql:5.7
  • 连接 mysql -h 127.0.0.1 -P 3360 -uroot -pmythos1104

最简单方式, 前提是已经安装好 docker-compose

  1. Github克隆项目,在该目录下执行命令
    • docker-compose up -d 既可创建 正确时区, utf8编码的数据库

MongoDB

Official

Redis

Official

  1. 获取镜像:docker pull redis 使用 docker pull redis:alpine 镜像可以更小
  2. 运行默认配置的容器:docker run --name test-redis -d redis
  3. 或者 使用本地配置文件启动redis容器
    • sudo docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
  • 数据迁移(RDB方式) 复制rdb文件到容器内 /data/dump.rdb , kill -9 redis进程,启动 redis

持续集成

参考: 如何Docker化端到端验收测试

flow.ci


Jenkins

详情


git服务器

简易git-daemon

基于git-daemon构建一个Docker镜像, 跑起来直接做git服务器 | 学习使用git-daemon命令

1
2
3
4
5
6
7
8
9
    # 创建一个挂载了本地文件夹的git仓库,并关联到nginx,目录结构和上文一致
    docker run --name git-repos -it -v /home/kuang/Repository/:/root/Repository/ --link mynginx:mynginx alpine
    # 进入容器
    docker exec -it git-repos ash
    # 安装git
    apk update
    apk add git git-daemon
    # 启动服务
    git daemon --export-all --base-path="/root/Repository" --port=55443

通过 daemon 能下拉提交代码, nginx 能在线浏览文件

Gogs

Gitea

配置

配置SSH

只要没有禁用掉SSH, 就能和Github一样使用SSH操作仓库, 为了避免其他进程的端口冲突, 单独设置端口 例如: 6002映射到了22上
~/.ssh/config

1
2
3
4
5
    Host git.kuangcp.com
    HostName 111.111.111.111
    User git
    Port 6002
    IdentityFile /home/kcp/.ssh/id_rsa

然后就能正常使用了


在线IDE

  • Coding平台的WebIDE

  • eclipse che

  • coder-severBS模式的VSCode


图形化应用

Github Topic
Running GUI apps with Docker
在Docker for Windows中运行GUI程序


工具

nextcloud

nextcloud

docker run -d --name nextcloud -p 8008:80 -v /data/nextcloud:/var/www/html nextcloud

Protobuf

  1. 创建一个Ubuntu/alpine 容器运行起来
  2. 下载 Github Release
  3. 安装 g++ make
  4. 编译安装下载的源码 进入目录 ./configure --prefix=/usr && make && make check && make install