【docker】教程 常用命令 基礎使用

==1. 概念==

1.1 Docker鏡像 - Docker Images

容器運行時的只讀模板,操作系統 + 軟件運行環境 + 用戶程序
class User {
    private String username;
    private Integer age;
}

1.2 Docker 容器 - Docker Containers

容器包含了某個應用運行所需要的全部環境

User user = new User();

1.3 Docker 倉庫 - Docker Registeries

用來保存鏡像,有公有和私有倉庫,比如Maven的中央倉庫和本地私服
[圖片上傳失敗...(image-e74e3-1551267580996)]

1.4 Tips

Docker Images : Java Class
Docker Containers : Java Object
通過類創建對象,通過鏡像創建容器

==2. 常見命令==

1.搜索鏡像 : docker search rabbitmq:management
2.查看系統鏡像 : docker images
3.拉取鏡像 : docker pull rabbitmq:management
    rabbitmq:management是具體鏡像名稱(格式 REPOSITORY:TAG)
    REPOSITORY : 表示鏡像的倉庫源
    TAG : 鏡像的標簽
4.運行一個容器 : 
    docker run -d -p 5672:5672 -p 15672:15672 --name beebee_mq rabbitmq:management
    docker run -d -p 6379:6379 --name "xd_redis" 4e8db158f18d
    docker run -it beebee-api
    docker run -d -p 8088:8088 -itv /software/docker/hadoop1/:/tmp --name hadoop1 id/name
    
    docker run : 運行一個容器
    -i : 以交互模式運行容器,通常與 -t 同時使用
    -t : 為容器重新分配一個偽輸入終端,通常與 -i 同時使用
    -v : 給容器掛載存儲卷,掛載到容器的某個目錄
    -d : 后臺運行
    -p : 端口映射
    rabbitmq:management(格式 REPOSITORY:TAG),如果不指定tag,默認使用最新的
    4e8db158f18d : IMAGE-ID
    --name : 容器名稱
5.查看當前運行的容器 : docker ps
6.檢查容器內部信息 : docker inspect id/name
7.刪除鏡像 : docker rmi 鏡像名稱
    -f : 強制刪除
8.刪除某個容器 : docker rm id/name(容器必須是停止狀態)
9.停止某個容器 : docker stop id/name
10.啟動某個容器 : docker start id/name
11.查看啟動日志 : docker logs -f id/name
12.在容器里面進行操作 : docker exec -it nginx /bin/bash
13.構建鏡像 : docker build -t eureka-server .
14.查看所有的容器 : docker ps -a
15.復制Linux到docker-文件 : docker cp nginx.conf my-nginx:/etc/nginx/nginx.conf
16.復制docker到Linux-文件夾 : docker cp my-nginx:/etc/nginx /etc/

==3. 高級命令==

1.查看所有的容器 : docker ps -a
2.進入docker容器 : docker exec -it web-nginx /bin/bash , docker attach web-nginx
3.停止守護式容器 : docker stop web-nginx , docker kill web-nginx
4.查看容器詳情 : docker inspect id/name
5.查看容器端口映射 : docker port web-nginx
6.容器IP地址 : docker inspect  id/name --> NetworkSettings --> IPAddress
7.查看docker存儲位置和驅動 : docker info
8.停止所有的容器 : docker stop $(docker ps -a -q)
9.刪除所有未運行的容器 : docker rm $(docker ps -a -q)
10.刪除所有未打tag的鏡像 : docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
11.刪除所有鏡像 : docker rmi $(docker images -q)
12.docker network
    docker network create : 創建
    docker network connect
    docker network ls : 列出
    docker network rm : 刪除
    docker network disconnect
    docker network inspect

==4. 啟動nginx==

1. 啟動-映射web文件夾 : docker run -dit -p 80:80 -p 443:443 -v /usr/share/nginx/html:/usr/share/nginx/html —name ng 42b4762643dc
2. 復制docker中nginx配置到Linux : docker cp ng:/etc/nginx /etc
3. 停止docker : docker stop ng
4. 重啟docker : docker start ng
5. 啟動-映射配置文件夾 : docker run -dit -p 80:80 -p 443:443 -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx —name ng 42b4762643dc

==5. 將項目打包為Docker鏡像==

5.1 添加pom依賴

<properties>
    <docker.image.prefix>beebee</docker.image.prefix>
</properties>
<build>
    <finalName>docker-demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

5.2 根目錄,新建Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

5.3 構建鏡像

mvn install -DskipTests dockerfile:build

5.4 推送鏡像到倉庫

登錄倉庫 : docker login --username=anson.zhifu@gmail.com registry.cn-beijing.aliyuncs.com
鏡像打標簽 : docker tag [ImageId] registry.cn-beijing.aliyuncs.com/beebee/51taqu:[鏡像版本號]
推送鏡像 : docker push registry.cn-beijing.aliyuncs.com/beebee/51taqu:[鏡像版本號]
拉取鏡像 : docker pull registry.cn-beijing.aliyuncs.com/beebee/51taqu:[鏡像版本號]
阿里云倉庫 : https://cr.console.aliyun.com

==6.Dockerfile==

1-FORM:基于什么鏡像,FROM <image>或FROM <image>:<tag>
2-MAINTAINER:維護者信息,MAINTAINER <name>
3-RUN:在基礎鏡像上執行,搭建環境,RUN <command> 或 RUN ["executable", "param1", "param2"]
4-CMD:啟動容器時執行的命令,只能有一條
    ? CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;
    ? CMD command param1 param2 在 /bin/sh 中執行,提供給需要交互的應用;
    ? CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數;
5-EXPOSE:容器暴露的端口號,EXPOSE <port> [<port>...]
6-ENV:指定環境變量,會被后續的RUN指令使用,并在容器運行時保持
7-ADD:就是復制文件到容器中,ADD <src> <dest>,<src>:可以是一個本地文件,可以是URL,tar文件會自動解壓
8-COPY:單純的復制本地文件到容器中,COPY <src> <dest>
9-ENTRYPOINT:容器啟動后執行的命令,并且不可被 docker run 提供的參數覆蓋,只能有一條命令
    ? ENTRYPOINT ["executable", "param1", "param2"]
    ? ENTRYPOINT command param1 param2(shell中執行)。
10-VOLUME:創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等,VOLUME ["/data"]
11-USER:容器運行時的用戶名,USER daemon
12-WORKDIR:切換目錄,為后續的 RUN、CMD、ENTRYPOINT 指令配置工作目錄
13-ONBUILD:配置當所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令,ONBUILD [INSTRUCTION]
# 1 基礎鏡像
FROM centos:centos6

# 2 維護者
MAINTAINER anson.zhang

# 3 安裝基本命令
RUN yum -y update
RUN yum -y groupinstall "Security Tools"
RUN yum -y groupinstall "Debugging Tools"
RUN yum -y groupinstall "Compatibility libraries"
RUN yum -y groupinstall "Development tools"
RUN yum -y groupinstall "Smart card support"
RUN yum -y groupinstall "Base"
RUN yum -y install openssh-clients
RUN yum -y install openssh-server
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 4 安裝jdk
COPY jdk-8u144-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN tar -xvf ./jdk-8u144-linux-x64.tar.gz
RUN mv ./jdk1.8.0_144 jdk

# 4 安裝hadoop
COPY hadoop-2.6.1.tar.gz /usr/local/
RUN tar -xvf ./hadoop-2.6.1.tar.gz
RUN mv ./hadoop-2.6.1 hadoop

# 5 設置jdk環境變量
ENV PATH /usr/local/jdk/bin:/usr/local/hadoop/bin:$PATH

# 6 設置掛載點,或共享卷
VOLUME ["/usr/local/data"]

# 7 使用root登錄Linux
# USER root

# 8 暴露端口
EXPOSE 22 80 8080 8090 

# 9 啟動時執行的命令
# CMD ["/bin/bash"]

# 映射文件夾,設置靜態ip,映射端口,系統時間
# docker run --name hadoop1 --net myIp --ip 172.17.2.1 -itv /software/docker/hadoop1/:/usr/local centos:centos6 /bin/bash

==7. 項目構建部署流程==

1. mvn clean compile install -DskipTests
2. docker build -t ...
3. docker images
4. docker tag ...
5. docker push ...
6. docker pull ...
7. docker images
8. docker ps
9. docker stop ...
10. docker rm ...
11. docker run ...

==8. 常見問題==

8.1 瀏覽器訪問不了docker內的接口

1.docker啟動時,docker容器端口要和Java應用端口一致
2.訪問時,要用http://localhost,http://127.0.0.1,http://59.110.238.225,https://58taqu.com,不要用http://192.168.1.48
3.排查 : 查看日志,curl,端口開放,防火墻

8.2 配置中心訪問出錯

[圖片上傳失敗...(image-1c358f-1551267580996)]

所有的微服務中添加以下配置
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    prefer-ip-address: true

8.3 注意事項

1.application.yml中的經常變動的變量不要寫死,比如用${mysql.address}動態取值,啟動命令docker run -it user-service:latest --mysql.address=192.168.1.7
2.寫完Dockerfile后,寫build.sh,方便以后構建,mvn ... 和 docker build ... 和 docker push ...

8.4 錯誤

1. 這個錯誤用此命令:systemctl restart docker
image
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容