1. 程式人生 > 其它 >分享自我的私人筆記Docker,光說不練假把式

分享自我的私人筆記Docker,光說不練假把式

映象

images_name 表示映象名
con_name表示容器名

#獲取映象
docker pull images_name 
#檢視已有的docker映象
docker images
#刪除映象
docker rmi image_name
#修改映象名
docker tag imageid name:tag
#匯出映象
docker save -o image_name.tar image_name

提交改變
將自己修改好的映象提交到本地

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a "leifengyang"  -m "首頁變化" 341d81f7504f guignginx:v1.0
#這樣啟動之後,執行的就是我們修改過的定製映象
docker run -d -p 88:80 guignginx:v1.0

容器

con_name表示容器名
image_name 表示映象名

#啟動一個容器
docker run image_name

#檢視正在執行的容器
docker ps

#檢視所有的容器
docker ps -a

#停止/啟動/重啟 一個容器
docker stop/start/restart con_name

#刪除容器
docker stop 容器
docker rm 
docker rmi

#編輯容器名稱
docker rename 原容器名 新容器名

#看容器的埠對映情況
docker port con_name

#動態檢視容器日誌
docker logs -f con_name

#動態檢視最後100行的容器日誌
docker logs -f –tail 100 con_name

#檢視容器pid
docker top con_name

#檢視docker容器IP
docker inspect con_name| grep IPAddress

#進入容器
docker exec -it con_name  /bin/bash

埠對映:
用docker安裝上mysql,去docker倉庫裡搜尋mysql

sudo docker pull mysql:5.7

# --name指定容器名字 
# -v目錄掛載 前面的目錄是Linux物理伺服器的本地目錄,後面的是mysql容器內部的目錄
# -p指定埠對映(前面的埠是Linux物理伺服器的埠)  
# -e設定mysql引數 -d後臺執行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

#這時我們在Linux虛擬機器上,可以看到mysql容器的內部資料變化
#也可以 修改Linux虛擬機器的/mydata/mysql/目錄檔案,自動同步到mysql容器內
[root@localhost vagrant]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6a685a33103f        mysql:5.7           "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
docker exec -it mysql bin/bash
exit;


因為有目錄對映,所以我們可以直接在映象外執行
vi /mydata/mysql/conf/my.conf 

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

儲存(注意評論區該配置不對,不是collection而是collation)

docker restart mysql

網路

net_name 網路名

#檢視所有網路
docker network ls
#建立一個docker網路
docker network create -d bridge net_name
#建立一個docker網路
docker run –network= net_name -itd –name=con_name image_name
#建立一個docker網路
docker network connect net_name con_name

檔案

host_path 主機檔案路徑
container_path 容器檔案路徑
containerID 容器id,用容器名也可以

#從主機複製到容器
sudo docker cp host_path containerID:container_path
#從容器複製到主機
sudo docker cp containerID:container_path host_path

kubenetes類似
1.kubectl cp /主機目錄/檔案路徑 podName:/容器路徑/xxx.datasource -n namespaces
這樣可以把主機目錄檔案拷貝到容器內
2.kubectl cp podName:容器路徑/xxx.datasource -n namespaces /主機目錄
這樣可以把容器內檔案cp到主機目錄

日誌

#剛執行就退出的容器,檢視日誌
docker start con_name -ia
#動態檢視容器日誌
docker logs -f con_name
#動態檢視最後100行的容器日誌
docker logs -f –tail=100 con_name

配置

#檢視容器配置
docker inspect con_name

中介軟體安裝

mysql

用docker安裝上mysql,去docker倉庫裡搜尋mysql

sudo docker pull mysql:5.7

# --name指定容器名字 
# -v目錄掛載 前面的目錄是Linux物理伺服器的本地目錄,後面的是mysql容器內部的目錄
# -p指定埠對映(前面的埠是Linux物理伺服器的埠)  
# -e設定mysql引數 -d後臺執行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

這時我們在Linux虛擬機器上,可以看到mysql容器的內部資料變化
也可以 修改Linux虛擬機器的/mydata/mysql/目錄檔案,自動同步到mysql容器內

[root@localhost vagrant]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6a685a33103f        mysql:5.7           "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

docker exec -it mysql bin/bash
exit;


因為有目錄對映,所以我們可以直接在映象外執行
vi /mydata/mysql/conf/my.conf 

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

儲存(注意評論區該配置不對,不是collection而是collation)

docker restart mysql

Redis

如果直接掛載的話docker會以為掛載的是一個目錄,所以我們先建立一個檔案然後再掛載,在虛擬機器中。

# 在虛擬機器中,Linux如果不提前建立redis.conf,-v /mydata/redis/conf/redis.conf會把redis.conf當作目錄
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

docker pull redis

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

# 直接進去redis客戶端。
docker exec -it redis redis-cli

預設是不持久化的。在配置檔案中輸入appendonly yes,就可以aof持久化了。修改完docker restart redis,docker -it redis redis-cli

exit
vim /mydata/redis/conf/redis.conf
# 插入下面內容,aof持久化
appendonly yes
儲存

docker restart redis

設定redis容器在docker啟動的時候啟動

docker update redis --restart=always

nginx

docker pull nginx:1.10
# 隨便啟動一個nginx例項,只是為了複製出配置,放到docker裡作為映象的統一配置
docker run -p 80:80 --name nginx -d nginx:1.10

cd /mydata/nginx
docker container cp nginx:/etc/nginx .
然後在外部 /mydata/nginx/nginx 有了一堆檔案
mv /mydata/nginx/nginx /mydata/nginx/conf
# 停掉nginx
docker stop nginx
docker rm nginx

# 建立新的nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

# 注意一下這個路徑對映到了/usr/share/nginx/html,我們在nginx配置檔案中是寫/usr/share/nginx/html,不是寫/mydata/nginx/html

docker update nginx --restart=always

測試

cd /mydata/nginx/html/
vim index.html
隨便寫寫
測試 http://192.168.56.10:80

dockers解除安裝

docker 解除安裝
使用yum安裝docker(安裝過程可以參照linux 安裝docker),如需解除安裝docker可以按一下步驟操作:

1、檢視當前docker狀態

如果是執行狀態則停掉

systemctl stop docker

2、檢視yum安裝的docker檔案包

yum list installed |grep docker

如果執行了上一步的刪除操作,則這裡的rpm就不會顯示
檢視docker相關的rpm原始檔,rpm -qa |grep docker

3、刪除所有安裝的docker檔案包

yum -y remove docker.x86_64

其他的docker相關的安裝包同樣刪除操作,刪完之後可以再檢視下docker rpm源

rpm -qa |grep docker

4、刪除docker的映象檔案,預設在/var/lib/docker目錄下

刪除上述的docker目錄

rm -rf /var/lib/docker

到此docker解除安裝就完成了