001.查看鏡像、容器、數據卷所佔用的空間
docker system df
002.具體查看鏡像內的歷史記錄
docker history nginx:v2
003.使用Dockerfile構建鏡像(注意後面有個點)
docker build -t myip .
004.使用compose對docker容器進行編排管理時,需要編寫docker-compose.yml文件需要注意縮進
yml文件換行後的縮進,不允許使用tab鍵字符,只能使用空格,而空格的數量要一致
005.docker-compose
負責實現對 Docker 容器集羣的快速編排
006.docker-machine
負責在多種平臺上快速安裝docker環境
007.swarm mode
負責將多個docker主機封裝爲單個大型的虛擬dockerd主機,快速打造一套容器雲平臺
008.安裝virtualbox
sudo apt-get purge virtualbox
sudo apt-get
install linux-generic
linux-image-generic
linux-headers-generic
linux-signed-generic
sudo apt-get
install virtualbox
009.docker鏡像加速器下載速度對比
加速器 | 地址 | Httpd,177MB下載鏡像耗時 | MySQL,407MB下載鏡像耗時 | Nginx,109MB下載鏡像耗時 |
---|---|---|---|---|
官方 | https://registry.docker-cn.com | 52 s | 42 s | 20 s |
阿里 | https://2lqq34jg.mirror.aliyuncs.com | 36 s | 38 s | 20 s |
網易 | http://hub-mirror.c.163.com | 67 s | 73 s | 475 s |
官方錯誤 | http://registry.docker-cn.com | 1770 s | 不忍測試 | 閒時再測 |
不使用 | --- | 一個字慢! | 不忍測試 | 閒時再測 |
結論:
1、使用加速器後,下載速度飛快,家庭100Mb寬帶環境下,鏡像下載速度能達到3-5MB/s以上。
2、由於Docker採用分層文件系統,不同鏡像公用一些相同的層文件,在下載後續鏡像時下載速度更快,比如阿里加速器下載MySQL鏡像,“達到”了10.7MB/s;
3、加速器地址一定要寫對,官方加速器的不能寫成http,一定要寫https,否則無加速效果;
4、加速器的加速效果差不多?官方的、阿里的、網易163的加速器效果如下:阿里 >官方 > 網易 > 不加速
5、Docker支持同時配置多個加速器,建議依上面的次序同時配置多個加速器。
6、代碼:
{
"registry-mirrors": [
"https://2lqq34jg.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
010.docker的run命令
docker run -it -v /usr/java/:/mnt/software/ myubuntu /bin/bash
docker run <相關參數> <鏡像ID 或者 倉庫名:標籤名> <初始命令>
相關參數包括:
-i:表示以“交互模式”運行容器
-t:表示容器啓動後會進入其命令行
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>
初始命令表示一旦容器啓動,需要運行的命令,若此處命令使用"/bin/bash",則表示什麼也不做,只需進入命令行即可
退出容器使用Ctrl+d或輸入exit
再次啓動已啓動過但現在是關閉的容器
docker start 容器ID或容器名
這個命令只會啓動容器,不會進入容器。要進入容器得用命令
docker attach 容器ID或容器名
011.docker如何查看已存在的容器所掛載的目錄
docker inspect container_name | grep Mounts -A 20
012.docker啓動mysql容器
初次啓動需要指定root用戶密碼, 也可在docker-compose中指定, 直接用docker-compose啓動
docker run -e MYSQL_ROOT_PASSWORD=root -p 33066:3306 --name mysql-5.7 -d mysql:5.7 -v /data/mysql/my.cnf:/etc/mysql/mysql.conf.d -v /data/mysql/logs:/usr/local/mysql/logs -v /data/mysql/data:/var/lib/mysql
013.docker進入mysql容器
docker exec -it mysql-5.7 bash
# 然後進入mysql服務
mysql -uroot -p
014.docker啓動tomcat
docker run --mount source=tomcat-8.5-xyj,target=/usr/local/tomcat/webapps -p 8081:8080 --name tomcat-8.5 -d tomcat:8.5
015.DockerCompose通過compose工程名以及服務名從dockerEngine獲取當前所有含有此標記的容器以檢查當前工程所包含的服務狀態,根據當前狀態爲每個服務制定接下來的動作
- 若容器不存在,則服務動作設置爲創建(create)
- 若容器存在但設置不允許重建,則服務動作設置爲啓動(start)
- 若容器配置發生變化(config-hash)或者設置強制重建標誌,則服務動作設置爲重建(recreate)
- 若容器狀態爲停止,則服務動作設置爲啓動(start)
- 若容器狀態爲運行但其依賴容器需要重建,則服務狀態設置爲重建(recreate)
- 若容器狀態爲運行其無配置改變則不作操作
016.docker查看某個容器大小
進入docker容器默認位置:/var/lib/docker/containers, 文件夾名稱即爲容器名,文件夾大小即爲容器大小
17. Docker參考網站
Docker Hub官方網站(用於查找各種鏡像):
https://hub.docker.com/
docker-compose.yml文件各個參數的官方說明:
https://docs.docker.com/compose/compose-file/
18. Docker的各種docker-compose.yml文件
(1) MySQL
version: "3.5"
services:
mysql:
image: mysql:5.7
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
networks:
mysql:
ipv4_address: 172.20.0.2
volumes:
- type: volume
source: data
target: /var/lib/mysql
- type: volume
source: config
target: /etc/mysql/mysql.conf.d
- type: volume
source: logs
target: /usr/local/mysql/logs
volumes:
data:
config:
logs:
networks:
mysql:
driver: bridge
name: mysql
ipam:
driver: default
config:
-
subnet: 172.20.0.0/24
(2) Redis
version: "3.5"
services:
redis:
image: redis:4.0.9
restart: always
container_name: redis
volumes:
- type: volume
source: config
target: /usr/local/etc/redis
- type: volume
source: data
target: /data
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "6379:6379"
networks:
redis:
ipv4_address: 172.20.0.2
volumes:
config:
data:
networks:
redis:
driver: bridge
name: redis
ipam:
driver: default
config:
-
subnet: 172.20.0.0/24
(3) Tomcat
version: "3.5"
services:
blog:
image: tomcat:8.5
restart: always
container_name: blog
ports:
- "8083:8080"
networks:
- mysql
volumes:
- type: volume
source: blog
target: /usr/local/tomcat/webapps
volumes:
blog:
name: blog
networks:
mysql:
external: true
name: mysql
(4) Java示例(執行了java -jar /opt/blogback.jar命令, 方便啓動容器後自動運行Java程序, 也可用於SpringBoot項目的部署)
version: "3.5"
services:
blogback:
image: java:8
restart: always
container_name: blogback
ports:
- "8082:8080"
working_dir: /opt
command: java -jar /opt/blogback.jar
networks:
- mysql
volumes:
- type: volume
source: blogback
target: /opt
volumes:
blogback:
name: blogback
networks:
mysql:
external: true
name: mysql
(5) GitLab
version: "3.5"
services:
gitlab:
image: gitlab/gitlab-ce:10.5.4-ce.0
restart: always
container_name: gitlab
ports:
- "8085:80"
- "2222:22"
hostname: "gitlab.ywz.com"
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['gitlab_shell_ssh_port'] = 2222
volumes:
- type: volume
source: config
target: /etc/gitlab
- type: volume
source: logs
target: /var/log/gitlab
- type: volume
source: data
target: /var/opt/gitlab
volumes:
config:
name: gitlab_config
logs:
name: gitlab_logs
data:
name: gitlab_data
(6) Jenkins
version: "3.5"
services:
jenkins:
image: jenkins:2.60.3
restart: always
container_name: jenkins
ports:
- "8080:8080"
volumes:
- type: bind
source: /home/paul/docker/myvolume/jenkins/home
target: /var/jenkins_home
(7) Nexus
version: "3.5"
services:
nexus:
image: sonatype/nexus3:3.8.0
restart: always
container_name: nexus
ports:
- "8081:8081"
volumes:
- type: volume
source: data
target: /nexus-data
volumes:
data:
(8) Nginx
version: "3.5"
services:
nginx:
image: nginx:1.13
restart: always
container_name: nginx
ports:
- "80:80"
volumes:
- type: volume
source: config
target: /etc/nginx
volumes:
config:
(9) Python
version: "3.5"
services:
python:
image: python:3.5
restart: always
container_name: python
tty: true
command: bash
volumes:
- type: volume
source: workspace
target: /home
- type: volume
source: lib
target: /usr/local/lib
volumes:
workspace:
name: python_workspace
lib:
name: python_lib
(10) 多個Tomcat項目共用MySQL, Redis示例
version: "3.5"
services:
jn:
image: tomcat:8.5
restart: always
container_name: tomcat_oa_jn
ports:
- "8082:8080"
networks:
- mysql_oa
- redis_oa
volumes:
- type: bind
source: /home/paul/docker/myvolume/tomcat_oa_jn/webapps
target: /usr/local/tomcat/webapps
depends_on:
- mysql_oa
- redis_oa
xq:
image: tomcat:8.5
restart: always
container_name: tomcat_oa_xq
ports:
- "8083:8080"
networks:
- mysql_oa
- redis_oa
volumes:
- type: bind
source: /home/paul/docker/myvolume/tomcat_oa_xq/webapps
target: /usr/local/tomcat/webapps
depends_on:
- mysql_oa
- redis_oa
test:
image: tomcat:8.5
restart: always
container_name: tomcat_oa_test
ports:
- "8084:8080"
networks:
- mysql_oa
- redis_oa
volumes:
- type: bind
source: /home/paul/docker/myvolume/tomcat_oa_test/webapps
target: /usr/local/tomcat/webapps
depends_on:
- mysql_oa
- redis_oa
mysql_oa:
image: mysql:5.7
restart: always
container_name: mysql_oa
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3307:3306"
networks:
mysql_oa:
ipv4_address: 172.20.0.2
volumes:
- type: volume
source: mysql_data
target: /var/lib/mysql
- type: volume
source: mysql_config
target: /etc/mysql/mysql.conf.d
- type: volume
source: mysql_logs
target: /usr/local/mysql/logs
redis_oa:
image: redis:4.0.9
restart: always
container_name: redis_oa
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "6379:6379"
networks:
redis:
ipv4_address: 172.21.0.2
volumes:
- type: volume
source: redis_config
target: /usr/local/etc/redis
- type: volume
source: redis_data
target: /data
volumes:
mysql_data:
name: mysql_oa_data
mysql_config:
name: mysql_oa_config
mysql_logs:
name: mysql_oa_logs
redis_config:
name: redis_oa_config
redis_data:
name: redis_oa_data
networks:
mysql_oa:
driver: bridge
name: mysql_oa
ipam:
driver: default
config:
-
subnet: 172.20.0.0/24
redis_oa:
driver: bridge
name: redis_oa
ipam:
driver: default
config:
-
subnet: 172.21.0.0/24
19. Dockerfile實現在centos7-jdk8容器中安裝應用(以libreoffice爲例)
(1) Dockerfile文件
FROM bpatterson/centos7-jdk8
RUN yum update -y
RUN yum install -y libreoffice-headless libreoffice-writer libreoffice-calc libreoffice- libreoffice-impress libreoffice-langpack-zh-Hans libreoffice-langpack-zh-Hant libreoffice-langpack-ja ImageMagick curl
RUN yum clean all
WORKDIR /
(2) 在Dockerfile文件所在目錄下執行如下命令生成鏡像
docker build -t libreoffice:1.0 .
(3) 鏡像生成後就可以通過compose文件或者直接使用命令啓動容器了
version: "3.3"
services:
libreoffice:
image: libreoffice:1.0
restart: always
tty: true
command: /bin/bash
container_name: libreoffice
ports:
- "8192:8080"
volumes:
- type: bind
source: /home/libreoffice/data
target: /home/libreoffice/data
(4) 啓動容器後運行容器內應用
docker exec -t libreoffice libreoffice --headless --convert-to pdf /home/libreoffice/data/source/test.xls --outdir /home/libreoffice/data/target
(5) libreoffice功能
實現附件格式轉換, 如: xls文件轉換爲doc文件, doc文件轉換爲pdf文件等等.