前言
Docker是目前比較火的一個概念,同時也是微服務中比較關鍵的一個容器化技術。但是,單從理論上好難看出Docker的優勢,因此,我希望在這篇文章中提供一些Docker的使用示例,希望從實際應用上幫助大家理解Docker的優勢,同時也對自己的Docker使用進行簡單的記錄。
目錄
准備事項
一、啟動.Net Core
二、啟動靜態Html
三、啟動Mysql
四、啟動MongoDB
五、啟動Redis
六、啟動RabbitMQ
七、啟動Nginx
八、啟動Eureka
九、啟動Config Server
准備事項
1. 安裝Docker
我使用的操作系統是CentOS 7/7.1,如何安裝Docker,可以參考園子里的這篇文章:《Centos安裝Docker》。
2. Docker加速
Docker的標准鏡像庫Docker Hub在國外,不進行Docker加速的話拉取鏡像會比較慢,這里我使用道客(DaoCloud)來進行Dokcer加速。在“配置Docker加速器”里有配置加速的指令:
在Linux中進行配置
執行sudo su -,獲取root權限,如果本身是root帳號,可跳過:
執行道客的配置指令:
執行systemctl restart docker,重啟Docker:
一、啟動.Net Core
1. 拉取dotnet標准鏡像,鏡像地址:https://hub.docker.com/r/microsoft/dotnet/
2. 拉取鏡像:docker pull microsoft/dotnet
3. 執行docker images查看已下好的鏡像
4. 新建一個.Net Core HelloWorld程序並發布
5. 准備Dockerfile,並把Dockerfile拷貝到HelloWorld程序同級目錄。注:.Net Core運行的默認端口是5000,這里通過環境變量的方式把端口修改為8080
FROM microsoft/dotnet:latest COPY . /app WORKDIR /app EXPOSE 8080/tcp ENV ASPNETCORE_URLS http://*:8080 ENTRYPOINT ["dotnet", "HelloWorld.dll"]
6. 定位到程序目錄,執行指令把HelloWorld程序打包成Docker鏡像
docker build -t hello-world:1.0 .
7. 運行Docker容器
docker run --name hello-world -p 8080:8080 -d hello-world:1.0
8. 檢查結果
二、啟動靜態Html
1. 拉取Nginx官方鏡像,鏡像地址:https://hub.docker.com/_/nginx/
2. 拉取鏡像:docker pull nginx
3. 准備html程序,可以使用我之前的一個Durandal的示例:https://github.com/ErikXu/DurandalDemo
4. 准備Dockerfile,並把Dockerfile拷貝到Html程序同級目錄。注:程序中需要有一個入口頁面,如index.html
FROM nginx:latest COPY . /usr/share/nginx/html
5. 定位到程序目錄,執行指令把Html程序打包成Docker鏡像
docker build -t html:1.0 .
6. 運行Docker容器,注:這里把容器中的80端口映射到虛擬機的81端口
docker run --name html -p 81:80 -d html:1.0
7. 檢查結果
三、啟動Mysql
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/_/mysql/
2. 拉取鏡像:docker pull mysql
3. 准備Mysql數據存放目錄,我這里是:/home/erikxu/mysql
4. 執行指令啟動Mysql
docker run --name mysql -v /home/erikxu/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
5. 檢查結果
四、啟動MongoDB
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/_/mongo/
2. 拉取鏡像:docker pull mongo
3. 准備MongoDB數據存放目錄,我這里是:/home/erikxu/mongo
4. 執行指令啟動MongoDB
docker run --name mongo -v /home/erikxu/mongo:/data/db -p 27017:27017 -d mongo:latest
5. 檢查結果
五、啟動Redis
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/_/redis/
2. 拉取鏡像:docker pull redis
3. 執行指令啟動Redis
docker run --name redis -d -p 6379:6379 redis
4. 檢查結果
六、啟動RabbitMQ
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/_/rabbitmq/
2. 拉取鏡像:docker pull rabbitmq,如需要管理界面:docker pull rabbitmq:management
3. 執行指令啟動RabbitMQ
無管理界面:
docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 rabbitmq
有管理界面:
docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 -p 15672:15672 rabbitmq:management
4. 檢查結果
七、啟動Nginx
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/_/nginx/
2. 拉取鏡像:docker pull nginx
3. 准備配置文件
worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name 192.168.52.130; location / { proxy_pass http://192.168.52.130:81/; } location /html/ { proxy_pass http://192.168.52.130:81/; } location /dotnet/ { proxy_pass http://192.168.52.130:8080/; } } }
4. 執行指令啟動Nginx
docker run --name nginx -p 80:80 -v /home/erikxu/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
5. 檢查結果
八、啟動Eureka
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/r/springcloud/eureka/
2. 拉取鏡像:docker pull springcloud/eureka
3. 執行指令啟動Eureka
docker run --name eureka -d -p 8761:8761 springcloud/eureka
4. 檢查結果
未有服務注冊:
下載SteelToe示例:https://github.com/SteeltoeOSS/Samples
打開Discovery,並修改appsetting.json:
按照README文檔描述啟動服務,進行服務注冊:
九、啟動Config Server
1. 拉取官方鏡像,鏡像地址:https://hub.docker.com/r/hyness/spring-cloud-config-server/
2. 拉取鏡像:docker pull hyness/spring-cloud-config-server
3. 在GitHub上准備配置文件:https://github.com/ErikXu/.NetCore-Spring-Clould/tree/master/Configs
4. 准備啟動資源文件application.yml:
info: component: config service server: port: 8888 spring: application: name: git-config profiles: active: dev cloud: config: server: git: uri: https://github.com/ErikXu/.NetCore-Spring-Clould searchPaths: Configs
5. 執行指令啟動Config Server,注:該指令前無空格
docker run --name configsvr -it -d -p 8888:8888 \
-v /home/erikxu/config/application.yml:/config/application.yml \
hyness/spring-cloud-config-server
6. 檢查結果
最后
如果大家有什么問題,或者需要添加其他程序的Docker啟動方式,歡迎一起溝通交流。