【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 : 鏡像的標簽
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.檢查容器內(nèi)部信息 : docker inspect id/name
7.刪除鏡像 : docker rmi 鏡像名稱
    -f : 強制刪除
8.刪除某個容器 : docker rm id/name(容器必須是停止狀態(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.復制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存儲位置和驅(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. 復制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
鏡像打標簽 : 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:就是復制文件到容器中,ADD <src> <dest>,<src>:可以是一個本地文件,可以是URL,tar文件會自動解壓
8-COPY:單純的復制本地文件到容器中,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:配置當所創(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容