1. docker hub

    在这里搜索docker镜像。

    https://hub.docker.com/

  2. Install Docker for Mac

    https://docs.docker.com/docker-for-mac/install/

  3. pm2-docker

    https://hub.docker.com/r/keymetrics/pm2-docker-alpine/

  4. mssql-server-linux

    https://hub.docker.com/r/microsoft/mssql-server-linux/

    拉取镜像:

    docker pull microsoft/mssql-server-linux:2017-latest
    

    运行mssql服务端:

    docker run --name mssql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_COLLATION=Chinese_PRC_CS_AI_WS' -p 30005:1433 -v /home/dockerdata/mssql:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest
    

    添加MSSQL_COLLATION参数,改变服务器的Collation,所有参数参考:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-2017

    运行另一个客户端去连服务端:

    docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P yourStrong(!)Password
    

    在sqlcmd里执行sql的时候,总是以GO触发执行操作。

    参考:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-linux-2017

    备份和恢复

    备份:

    sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q "BACKUP DATABASE [dbname] TO DISK = N'/var/opt/mssql/data/dbname.bak' WITH NOFORMAT, NOINIT, NAME = 'dbname-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    

    恢复:

    sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q "RESTORE DATABASE [dbname] FROM DISK = N'/var/opt/mssql/data/dbname.bak' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 5"
    

    恢复时使用NORECOVERY导致出现Database 'dbname' cannot be opened. It is in the middle of a restore.,后来改用RECOVERY就没有问题了。

    参考:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-backup-and-restore-database?view=sql-server-2017

  5. postgres

    官网postgres镜像:

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

    有debian版和alpine版。

    下载Dcokerfile和docker-entrypoint.sh,然后进行构建:docker build -t="postgres:9.6" .,需要注意是设置sh文件执行权限:chmod +x docker-entrypoint.sh

    不然在运行容器的时候可能会报以下错误:

    exec: "/docker-entrypoint.sh": permission denied
    docker: Error response from daemon: Container command could not be invoked..
    

    启动一个实例:

    # 暴露5432端口
    # 将数据放在数据卷中:/opt/dockervolume/postgres/data
    # 设置数据库超级用户名和密码
    sudo docker run --name my-postgres -p 5432:5432 -v /opt/dockervolume/postgres/data:/var/lib/postgresql/data -e POSTGRES_USER=[superuser] -e POSTGRES_PASSWORD=[password] -d postgres:9.6
    

    启动另外一个容器作为客户端使用psql去连上一个容器:

    sudo docker run -it --rm --link my-postgres:postgres postgres:9.6 psql -h postgres -U [superuser]
    

    备份和还原

    备份:

    # -n 指定schema
    sudo docker run -i --rm --link my-postgres:postgres postgres:9.6.3-alpine pg_dump -h postgres -U [user] -d [database] -n [schema] > dump.sql
    # 输入密码那一步是明文的。
    

    还原:

    cat dump.sql | sudo docker exec -i my-postgres psql -U [user]
    

    参考:https://stackoverflow.com/questions/24718706/backup-restore-a-dockerized-postgresql-database

  6. pgweb

    基于go实现的PostgresQL web工具。

    官网:https://github.com/sosedoff/pgweb

    Docker运行方式:

    # 拉取镜像
    sudo docker pull sosedoff/pgweb
    # 运行
    sudo docker run -p 8081:8081 -e DATABASE_URL=postgres://user:password@host:port/database sosedoff/pgweb
    
  7. tomcat

    官网tomcat镜像:

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

    通过dockerfile构建tomcat8.0.39镜像:

    docker build -t="tomcat-jre8-alpine:8.0.39" .
    

    运行tomcat镜像:

    docker run -it --rm --name bstest -p 7777:8080 -v /opt/tomcatwebapps:/usr/local/tomcat/webapps tomcat-jre8-alpine:8.0.39
    

    访问http://172.18.12.92:7777/restaurantbusiness

  8. Python docker image

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

    运行:

    sudo docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:2.7.13 python test.py
    
  9. redis

    运行redis服务端:

    启动的时候设置密码:

    docker run –name redis -p 6379:6379 -d redis –restart=always redis-server –appendonly yes –requirepass “your pass” “`

    参考:https://blog.csdn.net/cookily_liangzai/article/details/80726163

    运行另一个客户端去连服务端:

    docker run -it --link my-redis:redis --rm redis:3.2.8-alpine redis-cli -h redis -p 6379

  10. MySQL

    官方镜像:https://hub.docker.com/_/mysql/

    拉取5.6版本镜像:sudo docker pull mysql:5.6

    运行MySQL服务器:sudo docker run --name some-mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6

    如果要把数据库文件放在宿主机器上的/opt/dockervolume/mysql/data目录,运行:sudo docker run --name some-mysql -p 3306:3306 -v /opt/dockervolume/mysql/data:/var/lib/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6

    运行另外一个客户端去连服务端:

    sudo docker run -it --rm --link some-mysql:mysql mysql:5.6 mysql -h mysql -uroot -p
    

    输入密码,就可以进入MySQL命令行了。

    备份MySQL:

    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
    

    sudo docker run -i --rm --network=nm --link mysql:mysqlhost mysql:5.7.37 mysqldump -h mysqlhost -uroot -p --routines --databases trace_back > 1.sql
    

    !!不过备份的汉字注释乱码!! 通过以下第2个方法,重新编译镜像完成。

    第二种方法:在启动容器时添加--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci编码参数。

    参考:

    https://blog.csdn.net/nihaoma71121/article/details/77894437

    https://www.cnblogs.com/z-belief/p/6148463.html

    恢复MySQL:

    cat 1.sql | sudo docker exec -i some-mysql mysql -uroot -pmy-secret-pw trace_back
    

    参考:https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb

  11. Git Server

    镜像:https://hub.docker.com/r/jkarlos/git-server-docker/

    拉取镜像:docker pull jkarlos/git-server-docker

    运行Git Serve服务:

    docker run -d -p 2222:22 -v /home/dockerdata/git-server/keys:/git-server/keys -v /home/dockerdata/git-server/repos:/git-server/repos jkarlos/git-server-docker
    

    初始化qn-admin.git

    mkdir qn-admin
    cd qn-admin
    git init --shared=true
    git add .
    git commit -m "init"
    cd ..
    git clone --bare qn-admin qn-admin.git
    

    通过scp上传git仓库到服务器:scp -r qn-admin.git root@121.199.166.48:~/git-server/repos

    上传用户SSH key到服务器: scp ~/.ssh/id_rsa.pub root@121.199.166.48:~/git-server/keys

    !!更新SSH key之后,需要重启docker容器。

    客户端克隆项目: git clone ssh://git@121.199.166.48:2222/git-server/repos/qn-admin.git