1. docker hub

在这里搜索docker镜像。

https://hub.docker.com/
  1. Install Docker for Mac

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

  2. pm2-docker

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

  3. 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

  4. 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

  5. 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:[email protected]:port/database sosedoff/pgweb
    
  6. 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

  7. 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
    
  8. redis

    运行redis服务端:

    docker run --name my-redis -d 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

  9. 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 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 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 --link some-mysql:mysql mysql:5.6 mysqldump -h mysql -uroot -p --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

  10. 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 [email protected]:~/git-server/repos

    上传用户SSH key到服务器: scp ~/.ssh/id_rsa.pub [email protected]:~/git-server/keys

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

    客户端克隆项目: git clone ssh://[email protected]:2222/git-server/repos/qn-admin.git