Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協定開源。
Docker 可以讓開發者打包應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制 機製,相互之間不會有任何介面(類似 iPhone 的 app), 更重要的是容器效能開銷極低。
安裝前先關閉selinix, 重新啓動系統
vi /etc/selinux/config 修改 SELINUX=disabled
安裝
yum install docker
啓動
systemctl start docker
停止
systemctl stop docker
自啓動
systemctl enable docker
docker pull name:tag
舉例:
如:安裝mysql
docker pull docker.io/mysql:5.7.27
docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27
docker run [映象名]
-i 以互動模式執行容器
-t 爲容器重新分配一個僞輸入終端
-d 後臺執行容器,並返回容器ID;
-p 埠對映 (外部埠:容器內部埠)
-e 環境變數
--restart 重新啓動docker時是否自啓動該容器
--privileged 給容器新增特權,可以存取宿主機的檔案
--name 給容器取名
-v 掛載宿主機的資料夾或檔案到容器的特定資料夾或檔案
docker ps
docker ps -a
docker exec -it [容器id] /bin/bash
新增組態檔
vim /root/mysql/conf/my.cnf
###
[mysqld]
default-time-zone = '+08:00'
###
docker restart [容器id]
tips: 可以使用web ui 進行 docker 容器視覺化管理
docker pull docker.io/portainer/portainer
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --privileged=true --name prtainer-test portainer/portainer
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
docker rm $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
docker kill $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
如使重新啓動docker時容器自動啓動:
docker container update --restart=always [容器ID]
docker pull docker.io/mysql:5.7.27
docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27
1. 安裝
宿主機建立資料夾
mkdir /root/nginx
拉取映象
docker pull nginx
執行nginx容器
docker run -d --name mynginx -it -p 80:80 \
--restart=always \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf:/etc/conf \
-v /root/nginx/logs:/var/log/nginx \
--privileged=true \
nginx
組態檔
/root/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重新啓動nginx服務
docker exec -i {容器ID} nginx -s reload
docker run -d --hostname rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 4369:4369 -p 15671:15671 -p 5671:5671 -p 25672:25672 -p 15672:15672 -p 5672:5672 rabbitmq:3.8.3-management
docker commit -a 「作者」 -m 「容器描述」 [容器ID] [儲存的映象名]:[TAG]
docker commit -a "yangjing" -m "mysql with vim" a404c6c174a2 my-mysql:5.7.27
docker cp [宿主機檔案路徑] [容器ID]:[容器路徑]
docker cp /root/abc.txt 96f7f14e99ab:/var/abc.txt
docker cp [容器ID]:[容器路徑] [宿主機檔案路徑]
docker cp 96f7f14e99ab:/var/abc.txt /root/abc.txt
docker save -o [本地檔案路徑] [映象名]:[TAG]
docker save -o /root/my-mysql.tar my-mysql:5.7.27
docker load < [檔名]
docker load < my-mysql.tar
① 基本java程式打包到容器執行
# 使用含有openjdk8的基礎映象
FROM openjdk:8
MAINTAINER jim
# 新增該檔案到容器中
ADD file-test-0.0.1-SNAPSHOT.jar app.jar
# 向外部暴露埠
EXPOSE 81
# 啓動時執行該命令
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t jim/file-test .
# 構建完成檢視
docker images
docker run -it -d -p 81:81 jim/file-test