1. docker架構

這里的Client和DOCKER_HOST(docker server)都是在本地的,docker倉庫Registry是在遠程的;
Client的docker命令通過Docker daemon與docker server進行交互;
images鏡像是由應用已經被docker打包好的鏡像,如java、nginx的鏡像,這些鏡像可以運行在容器containers里;
每一個container容器都是運行在docker server(宿主機)上的,每一個container容器都是隔離的、獨立的;
每一個container容器相當於一個Linux操作系統,每一個container容器都有自己的ip地址,所以可以在不同的container內部設置相同的端口號,宿主機不同的端口號映射到不同的容器。

Docker是容器化技術的實現。

2. Docker的安裝

7、安裝Docker
sudo yum install -y docker-ce
8、啟動

systemctl start docker
如果把docker加入到開機啟動 systemctl enable docker
查看docker是否運行 ps -ef | grep docker
9. 查看docker版本
docker version


3. 配置阿里雲上docker加速的地址
來源:https://cr.console.aliyun.com/cn-hangzhou/mirrors

4. docker常用命令
4.1 鏡像相關命令
在docker倉庫查找被docker打包的鏡像: docker search java

利用docker下載java8: docker pull java:8
查看本地安裝的docker鏡像: docker images
刪除指定鏡像: docker rmi java
4.2 容器相關命令
新建並啟動容器
使用docker run命令即可新建並啟動容器,下面是一些常用的參數:

比如新建並啟動一個Nginx:
docker run -d -p 8100:80 nginx

如果當前沒有nginx鏡像,那么會先自動下載該nginx鏡像。
通過瀏覽器訪問:

列出當前運行容器
docker ps

如圖可以看到鏡像的名稱IMAGE,對應的CONTAINER_ID,以及PORTS。

停止容器
docker stop CONTAINER_ID || NAMES
強制停止容器
docker kill CONTAINER_ID
啟動已停止的容器
docker start CONTAINER_ID
查看容器所有信息
docker inspect CONTAINER_ID
查看容器日志
持續輸出日志(展示88行)
docker logs --tail=88 -f CONTAINER_ID(OR NAMES)
docker container logs CONTAINER_ID
查看容器里的進程
docker top CONTAINER_ID
查看已經創建的容器
docker ps -a

進入運行的容器(在docker容器中使用jmap等命令查看jvm內存等信息)
docker container exec -it CONTAINER_ID /bin/bash 或 docker container exec -it CONTAINER_ID sh

退出容器
exit
重命名一個容器
docker rename old_name new_name
刪除容器
docker ps -a 查看所有容器(包括未運行的容器)
docker rm CONTAINER_ID
刪除鏡像
docker images
docker rmi IMAGE ID
查看一個容器對應的端口映射
docker port 容器名name
4.3 Dockerfile常用命令

5. 構建一個自己定義的nginx docker鏡像
創建了一個目錄docker,進入該目錄下
vim Dockerfile
內容如下:
# Dockerfile文件,自定義一個nginx的index.html
FROM nginx
RUN echo '<h1>This is my nginx Dockerfile<h1>' > /usr/share/nginx/html/index.html
意思是先獲得nginx官方鏡像,然后我將運行的container容器中nginx的目錄下的index.html替換成我的內容。
在Dockerfile文件所在的目錄下,執行
docker build -t nginx:mynginx .
mynginx就是一個tag,相當於版本號,"."表示Dockerfile文件所在的路徑,在當前目錄下。

現在,查看一下本地鏡像
docker images

現在已經有本地鏡像了,下一步就是新建容器並且運行
docker run -d -p 8101:80 nginx:mynginx

用瀏覽器訪問一下

自定義nginx鏡像大功告成!
6. 簡單使用docker部署一個微服務項目
這里打算部署一個eureka server,端口號8200。
1. 首先把項目mvn clean install,目的是將項目和項目所依賴的jar包打成一個可執行的jar包,java -jar jar包名.jar;
2. 打成的jar包在項目的target目錄下,將jar包上傳至Linux服務器的eureka目錄下;
3. 將jar包所在的目錄創建一個Dockerfile文件 vim Dockerfile,內容為
# 基於哪個鏡像
FROM java:8
# 將文件掛載到當前容器
VOLUME /tmp # 復制文件到容器根目錄"/",並且命名為app.jar
ADD eureka-0.0.1-SNAPSHOT.jar /app.jar # 聲明需要暴露的端口
EXPOSE 8200
# 配置容器啟動后執行的命令,java -jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4. 在Dockerfile文件所在目錄,使用docker build 命令構建鏡像
docker build -t eureka-server:0.0.1 .
檢查是否image構建成功: docker images
5. 新建容器並且運行
docker run -d -p 8200:8200 eureka-server:0.0.1
6. 最后訪問宿主機的8200端口

該微服務部署成功!
7.docker-compose
https://www.cnblogs.com/theRhyme/p/10607872.html
來源:
圖靈學院
