【docker】教程 常用命令 基礎(chǔ)使用

==1. 概念==

1.1 Docker鏡像 - Docker Images

容器運行時的只讀模板姑蓝,操作系統(tǒng) + 軟件運行環(huán)境 + 用戶程序
class User {
    private String username;
    private Integer age;
}

1.2 Docker 容器 - Docker Containers

容器包含了某個應(yīng)用運行所需要的全部環(huán)境

User user = new User();

1.3 Docker 倉庫 - Docker Registeries

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

1.4 Tips

Docker Images : Java Class
Docker Containers : Java Object
通過類創(chuàng)建對象,通過鏡像創(chuàng)建容器

==2. 常見命令==

1.搜索鏡像 : docker search rabbitmq:management
2.查看系統(tǒng)鏡像 : docker images
3.拉取鏡像 : docker pull rabbitmq:management
    rabbitmq:management是具體鏡像名稱(格式 REPOSITORY:TAG)
    REPOSITORY : 表示鏡像的倉庫源
    TAG : 鏡像的標(biāo)簽
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.查看當(dāng)前運行的容器 : docker ps
6.檢查容器內(nèi)部信息 : docker inspect id/name
7.刪除鏡像 : docker rmi 鏡像名稱
    -f : 強制刪除
8.刪除某個容器 : docker rm id/name(容器必須是停止?fàn)顟B(tài))
9.停止某個容器 : docker stop id/name
10.啟動某個容器 : docker start id/name
11.查看啟動日志 : docker logs -f id/name
12.在容器里面進行操作 : docker exec -it nginx /bin/bash
13.構(gòu)建鏡像 : docker build -t eureka-server .
14.查看所有的容器 : docker ps -a
15.復(fù)制Linux到docker-文件 : docker cp nginx.conf my-nginx:/etc/nginx/nginx.conf
16.復(fù)制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存儲位置和驅(qū)動 : 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 : 創(chuàng)建
    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. 復(fù)制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 構(gòu)建鏡像

mvn install -DskipTests dockerfile:build

5.4 推送鏡像到倉庫

登錄倉庫 : docker login --username=anson.zhifu@gmail.com registry.cn-beijing.aliyuncs.com
鏡像打標(biāo)簽 : 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:基于什么鏡像烛缔,F(xiàn)ROM <image>或FROM <image>:<tag>
2-MAINTAINER:維護者信息,MAINTAINER <name>
3-RUN:在基礎(chǔ)鏡像上執(zhí)行轩拨,搭建環(huán)境践瓷,RUN <command> 或 RUN ["executable", "param1", "param2"]
4-CMD:啟動容器時執(zhí)行的命令,只能有一條
    ? CMD ["executable","param1","param2"] 使用 exec 執(zhí)行亡蓉,推薦方式晕翠;
    ? CMD command param1 param2 在 /bin/sh 中執(zhí)行,提供給需要交互的應(yīng)用砍濒;
    ? CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數(shù)淋肾;
5-EXPOSE:容器暴露的端口號,EXPOSE <port> [<port>...]
6-ENV:指定環(huán)境變量爸邢,會被后續(xù)的RUN指令使用樊卓,并在容器運行時保持
7-ADD:就是復(fù)制文件到容器中,ADD <src> <dest>杠河,<src>:可以是一個本地文件碌尔,可以是URL,tar文件會自動解壓
8-COPY:單純的復(fù)制本地文件到容器中感猛,COPY <src> <dest>
9-ENTRYPOINT:容器啟動后執(zhí)行的命令七扰,并且不可被 docker run 提供的參數(shù)覆蓋,只能有一條命令
    ? ENTRYPOINT ["executable", "param1", "param2"]
    ? ENTRYPOINT command param1 param2(shell中執(zhí)行)陪白。
10-VOLUME:創(chuàng)建一個可以從本地主機或其他容器掛載的掛載點颈走,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等,VOLUME ["/data"]
11-USER:容器運行時的用戶名咱士,USER daemon
12-WORKDIR:切換目錄立由,為后續(xù)的 RUN轧钓、CMD、ENTRYPOINT 指令配置工作目錄
13-ONBUILD:配置當(dāng)所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時锐膜,所執(zhí)行的操作指令毕箍,ONBUILD [INSTRUCTION]
# 1 基礎(chǔ)鏡像
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 設(shè)置jdk環(huán)境變量
ENV PATH /usr/local/jdk/bin:/usr/local/hadoop/bin:$PATH

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

# 7 使用root登錄Linux
# USER root

# 8 暴露端口
EXPOSE 22 80 8080 8090 

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

# 映射文件夾道盏,設(shè)置靜態(tài)ip而柑,映射端口,系統(tǒng)時間
# docker run --name hadoop1 --net myIp --ip 172.17.2.1 -itv /software/docker/hadoop1/:/usr/local centos:centos6 /bin/bash

==7. 項目構(gòu)建部署流程==

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內(nèi)的接口

1.docker啟動時荷逞,docker容器端口要和Java應(yīng)用端口一致
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)]

所有的微服務(wù)中添加以下配置
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中的經(jīng)常變動的變量不要寫死膝迎,比如用${mysql.address}動態(tài)取值粥帚,啟動命令docker run -it user-service:latest --mysql.address=192.168.1.7
2.寫完Dockerfile后,寫build.sh弄抬,方便以后構(gòu)建茎辐,mvn ... 和 docker build ... 和 docker push ...

8.4 錯誤

1. 這個錯誤用此命令:systemctl restart docker
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掂恕,隨后出現(xiàn)的幾起案子拖陆,更是在濱河造成了極大的恐慌,老刑警劉巖懊亡,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件依啰,死亡現(xiàn)場離奇詭異,居然都是意外死亡店枣,警方通過查閱死者的電腦和手機速警,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸯两,“玉大人闷旧,你說我怎么就攤上這事【疲” “怎么了忙灼?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我该园,道長酸舍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任里初,我火速辦了婚禮啃勉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘双妨。我一直安慰自己淮阐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布斥难。 她就那樣靜靜地躺著枝嘶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哑诊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天及刻,我揣著相機與錄音镀裤,去河邊找鬼。 笑死缴饭,一個胖子當(dāng)著我的面吹牛暑劝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颗搂,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼担猛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丢氢?” 一聲冷哼從身側(cè)響起傅联,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疚察,沒想到半個月后蒸走,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡貌嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年比驻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岛抄。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡别惦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夫椭,到底是詐尸還是另有隱情掸掸,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布益楼,位于F島的核電站猾漫,受9級特大地震影響点晴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悯周,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一粒督、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禽翼,春花似錦屠橄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至长酗,卻和暖如春溪北,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夺脾。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工之拨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咧叭。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓蚀乔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菲茬。 傳聞我的和親對象是個殘疾皇子吉挣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容