分享自我的私人筆記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