# dockerjava
[TOC] ## docker概念 概念官網解釋:[docker官網](https://www.docker.com/) 1. 開放平臺 2. 容器技術 3. LXC(Linux Container) ### 組成 1. Docker Engine:運行平臺,構建鏡像(核心概念:Docker鏡像 image,Docker容器 containers,docker Registry)
2. Docker Registry:託管鏡像的倉庫 3. Docker Hub:託管存儲和共享鏡像 4. Docker Machine:構建容器運行環境的配置 5. Docker Compose:多容器應用管理 6. Docker Swarm:容器集羣和調度管理工具 7. Kitematic:桌面GUI管理程序(測試過Windows,體驗還行) 8. Docker Toolbox(替代Boot2Docker) 9. Docker Trusted Registry(DTR) 10. Docker Subscription ### 架構
### 生態 --- ## docker命令 --- ## docker 網絡(略) ``` ip link add veth-a type veth peer name veth-b ip a |grep veth brctl addif br0 veth-a ip link set veth-a up ip link set veth-b netns test1 ... ``` --- ## 實戰 ### 安裝 centos ``` yum install docker ``` ubuntu ``` apt install docker.io ``` 啓動 ``` service docker start 或者 systemctl start docker.service ``` 設置開機啓動 ``` chkconfig docker on 或者 systemctl enable docker.service ``` ### docker 命令 #### 查看 ``` docker info ```
#### run -i(stdin) -t(stdout) -d(後臺運行) --rm (執行exit命令後就會退出刪除容器,至關於運行一個臨時的容器) ``` docker run -it centos /bin/bash docker run --name haha -it centos /bin/bash docker start haha docker ps
#附着 docker attach haha
#解附着,後臺運行
ctrl+P+Q
#執行shell腳本「while」循環
docker run --name daemon_haha -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done"
#查看日誌:-t加時間戳-f監控
docker logs -t -F daemon_haha docker logs --tail 2 -t daemon_haha
# 查看容器對應宿主機的目錄對應
container id cd /var/lib/docker/containers docker ps -a
##到對應的容器id目錄下便可查看日誌文件
```
docker top daemon_haha
```
#### exec (開啓交互模式)
``` docker exec -i -t daemon_haha /bin/bash docker ps
# 退出還會在後臺運行,至關於只是將/bin/bash進程退出而已 exit docker ps
#存在建立的txt文件
```
docker exec -d daemon_haha touch /etc/docker.txt docker exec -it daemon_haha /bin/bash ll /etc/ ``` #### ps(查看正在運行的容器) -a(包括中止的容器) ``` docker ps -l docker ps -a docker ps -n 2 ``` #### stop(中止後臺運行) ``` docker stop daemon_haha docker ps docker start daemon_haha docker ps ``` #### kill(不建議) ``` docker kill daemon_haha ``` #### inspect(查看容器信息) ``` #看容器的屬性,hostnamepath主機名的路徑,容器的id,鏡像的id docker inspect daemon_haha docker inspect --format='{{.State.Running}}' daemon_haha ``` #### rm(刪除容器) ``` docker rm haha docker ps -a -q docker rm `docker ps -a -q` docker rm -f `docker ps -a -q` #正在運行的須要中止或者強制刪除-f docker rm -f `docker ps -a -q` #或者 docker rm -f $(docker ps -a |awk '{print $1}') ``` #### save(保存) ``` docker save [images_tag]> test.tar ``` #### load(導入) ``` docker load test.tar ``` #### export(備份) ``` docker ps -a docker export [docker id] > my_container.tar cat my_container.tar | docker import - container:test docker images docker run -it container:test /bin/bash ``` #### import docker import [container_name] #### search ``` docker search centos ``` #### commit ``` docker commit [container id ] haha/test ``` --- #### build docker build從客戶端傳輸到docker守護進程,構建是在守護進程裏面進行的 Dockerfile所在的目錄就是構建目錄,將文件發給守護進程 ``` Dockerfile FROM centos MAINTAINER ruofei RUN mkdir /usr/local/test EXPOSE 80 ``` ``` docker build --no-cache -t="haha/no-cache". docker images docker build -t "haha/use-cache" . ``` #### history 查看鏡像構建過程 ``` docker history haha/use-cache ``` ### Dockerfile #####ENV 環境變量的設置,設置完,啓動容器後使用env命令查看: ``` env #輸出例子 HOSTNAME=b123876429ce OLDPWD=/opt/spark-1.6.0-bin-hadoop2.6/bin PYTHON_VERSION=2.7.5 ``` 也能夠使用docker -e 「<key>:<value>」傳入環境變量 ##### WORKDIR 工做目錄,相似cd命令去到工做的目錄下面 ##### CMD & ENTRYPOINT CMD:容器運行時指定運行命令,可被用戶覆蓋;ENTRYPOINT:容器啓動時指定默認運行命令,不可被用戶指定參數被覆蓋,多個ENTRYPOINT,最後一個成立。 ##### ARG 指定參數讓用戶docker build --build-arg 將參數傳入 ``` 若是ARG指定了一個默認值而且在構建期間沒有傳遞值過去,那麼就使用默認值。 ARG變量定義從在Dockerfile定義的行生效,而不是從在命令行參數的使用或其它地方。 ``` ``` FROM busybox USER ${user:-some_user} ARG user USER $user ... ``` 使用以下命令構建: ``` docker build --build-arg user=haha_user -f path_Dockerfile ``` ps:第一個傳入的user值爲-some_user,後面被用戶傳入的haha_user覆蓋了。注意不要傳入祕鑰等隱私數據,由於能夠經過docker history查看 ### 集羣 #### web 1. (1)先構建JDK鏡像 在當前目錄(/root/jdk) ```Dockerfile FROM centos MAINTAINER StephenLu ADD jdk-7u75-linux-x64.tar.gz /usr/local RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV JRE_HOME /usr/java/jdk1.7/jre ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar :$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH ``` (2)將JDK拷貝過來當前目錄 ``` cp ../jdk-7u75-linux-x64.tar.gz . ``` (3)建立鏡像 ``` docker build –t=」hadoop/jdk」 . docker run --rm -it [image_id] ls /usr/local ``` 2. Dockerfile ``` FROM hadoop/jdk MAINTAINER StephenLu ADD appache-tomcat-7.0.62.tar.gz /usr/local WORKDIR /usr/local RUN mv apache-tomcat-7.0.62 tomcat7 WORKDIR /usr/local/tomcat7/bin EXPOSE 8080 ``` (2) ``` docker run --rm -ti 0a2fb0c55cea ``` (3) ``` docker run --rm -P -it 0a2fb0c55cea /bin/bash ./startup.sh #測試 docker ps curl -XGET '192.168.66.217:007' # ./startup.sh在後臺運行,docker覺得容器內沒運行進程就停調了 docker run –d –P hadop/tocat ./startup.sh # 使用調試模式啓動tomcat docker run –d –P hadoop/tomcat ./catalina.sh run docker ps -l # 動態指定volume docker run -d -P -v /usr/local/yf_test:/usr/local/tomcat7/webapp -p 8080:8080 hadoop/tomcat ./catalina.sh run docker ps # 頁面訪問 ip:port/haha/a.txt ``` #### Redis 1.單機 Dockerfile ``` ``` 2.集羣 #### spark #### hadoop #### tensorflow 使用docker-compose 0.安裝docker-compose ``` pip install docker-compose ``` 1.建立yml文件docker-compose.yml ``` version: '2' services: jupyter: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "8888:8888" volumes: - "/tmp/tensorflow_logs" - "./notebooks:/root/notebooks" command: - "/run_jupyter.sh" - "/root/notebooks" tensorboard: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "6006:6006" volumes_from: - jupyter command: - "tensorboard" - "--logdir" - "/tmp/tensorflow_logs" - "--host" - "0.0.0.0" ``` 2.啓動運行環境 ``` docker-compose up -d ``` 3.檢查 ``` docker-compose ps ``` 4.使用環境 http://127.0.0.1:8888/tree 獲取鏡像 ``` docker pull floydhub/dl-docker:cpu ``` 運行 ``` docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu jupyter notebook (docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu tensorboard --logdir /tmp/tensorflow_logs --host 0.0.0.0) #檢查,瀏覽器登陸0.0.0.0:8888,查看jupyter notbook;0.0.0.0:6006,查看tensorbo docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash ``` 查看版本 ``` import tensorflow as tf import keras tf.__version__ #0.8.0 print keras.__version__ #1.0.3 th.__version__ #0.8.2 caffe.__version__ #'1.0.0-rc3'