docker基礎操作+創建使用mysql nginx nginx zookeeper tomcat


https://www.runoob.com/docker/docker-tutorial.html

1. 安裝Docker

sudo yum update
# 安裝需要的軟件包,yum-util提供yum-config-manager功能,其他兩個提供devicemapper驅動依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#設置yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker
sudo yum install docker-ce
# 查看版本
docker -v 

2. ustc鏡像

linux鏡像服務提供者,加速很快,ustc docker mirror的優勢之一是不需要註冊,真正的公共服務。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

# 創建文件
/etc/docker/daemon.json
# 寫入內容
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3. 啓動停止docker

systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker # 開機啓動
docker info # 查看docker概要信息
docker --help [command]

4. 命令集

docker -help

4.1 查看已下載鏡像

  1. repository 鏡像名稱,TAG 鏡像標籤,IMAGE ID 鏡像id,CREATED創建日期(非獲取日期),SIZE 鏡像大小

  2. 全部存儲在Docker宿主機的/var/lib/docker

docker images 

4.2 搜索鏡像

從網絡中查找需要的鏡像.

starts 用戶評價 數量越多評價越好, official 是否官方

AUTOMATED 自動構建,表示該鏡像由Docker Hub自動構建流程創建的

docker search 鏡像名稱

4.3 拉取鏡像

docker pull 鏡像名稱:TAG # 不指定TAG時默認最新版Latest
# 如 docker pull redis ==> docker pull redis:latest

4.4 刪除鏡像

# 按id刪除, 當前鏡像有運行中容器不允許刪,需要停止當前鏡像所有容器
docker rmi 鏡像id # rmi ==> remove image
# 刪除所有鏡像
docker rmi `docker images -q`

4.5 查看運行狀態

# 正在運行
docker ps
# 查看所有容器
docker ps -a
# 查看最後一次運行的容器
docker ps -l
# 查看停止的容器
docker ps -f status=exited

4.6 創建與啓動容器

docker run
參數:
-i 運行容器
-t 表示容器啓動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個僞終端。
--name:爲創建的容器命名。
-v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上。
-d:在run後面加上-d參數,則會創建一個守護式容器在後臺運行(這樣創建容器後不會自動登錄容器,如果只加-i-t兩個參數,創建後就會自動進容器)。
-p:表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可以使用多個p做多個端口映射

4.6.1 交互式方式創建容器

docker run -it --name=容器名稱 鏡像名稱:標籤 /bin/bash
# /bin/bash ==> 加載命令行能執行一些命令
docker run -it --name="myredis" redis:latest /bin/bash
# root@c5b5509d7acd:/data#
exit # 退出到宿主機,容器會關閉 docker ps -a 可以查看到已經關閉

4.6.2 守護式創建容器

docker run -di --name=容器名稱 鏡像名稱:標籤
docker exec -it 容器名稱 /bin/bash # 進入啓動了的容器
exit # 退出以後還在運行

4.6.3 容器重命名

docker rename 原容器名  新容器名

4.6.4 查看容器掛載目錄

docker inspect container_name | grep Mounts -A 20

4.7. 停止容器

docker stop id/容器名字

4.8 啓動容器

docker start id/容器名字

4.9 拷貝

4.9.1將文件拷貝到容器內

docker cp 需要拷貝的文件或目錄 [拷貝後的名字] 容器名稱:容器目錄

4.9.2 將容器中的文件拷貝出來

docker cp 容器名稱:容器目錄/需要拷貝的文件或目錄 [拷貝後的名字]

4.10.0 查看容器

docker container ls

4.10 目錄掛載

我們可以在創建容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器。

創建容器添加-v參數後邊爲宿主機目錄:容器目錄,例如:

docker run -di -v /usr/1ocal/myhtml:/usr/1ocal/myhtml --name-mycentos3 centos:7
docker run -di --name=mytomcat9 -p 8080:8080 -v /usr/1ocal/webapps:/usr/1ocal/tomcat/webapps 鏡像名稱

如果你共享的是多級的目錄,可能會出現權限不足的提示。
這是因爲CentOS7中的安全模塊selinux把權限禁掉了,我們需要添加參數-privileged=true 來解決掛載的目錄沒有權限的問題

4.11 查看容器各種數據

可以格式化輸出,見4.12

docker inspect 容器名稱(容器ID)

4.12 查看容器ip地址

其他數據也可以用類似的方式,格式化輸出

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱/id

4.13 刪除容器

# 只能刪除停止的容器 docker rm 容器名稱/id
docker rm 容器名稱/id

5. 實例

這裏只寫了會用的一些,用來練手docker命令,如果想要看其他的特定的還是自己仔細研究一下吧。。。

5.0 docker hub查找鏡像版本

查找 Docker Hub 上的 軟件 鏡像:

https://hub.docker.com/_/軟件名?tab=tags

如:https://hub.docker.com/_/mysql?tab=tags

找到對應版本(順帶複製命令)

5.1 MySQL

# 拉取鏡像
docker pull mysql:8
# 創建容器, 55555:3306端口映射 通過訪問容器的55555端口訪問mysql的3306端口 , mysql:8 鏡像名稱
# MYSQL_ROOT_PASSWORD=root root用戶密碼
docker run -di --name=docker_mysql8 -p 55555:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8
# 創建成功後控制檯會打印出完整id:777f4abd7b5da9505528fd14aa400f9043aca119e3d69a45509404ad2658f5cc
# 查看容器ip
172.17.0.2
# 尷尬了,本地沒裝mysql,默認又只是localhost,需要到容器內部去改
# 進入容器
docker exec -it docker_mysql8 bash
# 登錄
mysql -uroot -p
# 改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'fuck!';
#添加遠程登錄用戶
CREATE USER 'remote'@'%' IDENTIFIED WITH mysql_native_password BY 'remote!';
# 添加遠程登陸權限
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%';
# 然後還是不可以,因爲是在win10 -> VMware -> centos -> docker
# 增加路由
route add -p 172.17.0.0 mask 255.255.255.0 192.168.40.133
#本機->虛擬網卡(192.168.110.1)->centos虛擬機ip(192.168.40.133)->linux虛擬機裏的虛擬網卡(172.17.41.1)->docker容器(172.17.0.2)
本機 ping 172.17.0.2 成功!
(但是隻能通過3306端口連接,而不能通過55555映射)
# 然後突然靈光一現,反應過來了 md 瞎折騰腦殘了
# 直接連接虛擬機的55555就行了,因爲docker是在centos上跑的,映射端口自然是虛擬機的,我連接docker內部的搞個鬼。。
mysql -uroot -p -h 192.168.40.133 -P 55555 # 成功登陸 mdzz
# 彌補錯誤,刪除剛纔添加的路由表,再見
route delete 172.17.0.0

通過docker ps查看s

[root@localhost etc]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
777f4abd7b5d mysql:8 “docker-entrypoint.s…” 59 seconds ago Up 58 seconds 33060/tcp, 0.0.0.0:55555->3306/tcp docker_mysql8

5.2 Tomcat

# 前面9.0是tomcat版本 後面是jdk版本
docker pull tomcat:9.0-jdk8-corretto
# -v 掛載目錄 宿主機目錄:目標目錄
docker run -di --name=mytomcat9 -p 8080:8080 -v /usr/1ocal/webapps:/usr/1ocal/tomcat/webapps tomcat:9.0-jdk8-corretto

curl 192.168.40.133:8080

5.3 Nginx

docker pull nginx:1.17.7-perl
docker run -di --name=nginx1.7 -p 80:80 nginx:1.17.7-perl

curl 10.25.208.66
docker exec -it nginx1.7 bash
cd etc/nginx/conf.d/
# 然後會看見一個配置文件
default.conf
# 通過查看配置文件發現靜態資源默認位置/usr/share/nginx/html,默認有兩個文件50x.html  index.html
# 靜態資源,直接使用docker命令拷貝進去就行了
docker cp opms-web nginx1.7:/usr/share/nginx/html
# 複製進去以後測試意識到路徑問題,將opms-web裏面的內容直接全部移動到外面來就行了
# docker裏面刪除目錄只能rm -rf opms少個rm -f 都不行。。

5.4 Redis

docker pull redis:5.0.7
docker run -di --name=redis5 -p 6379:6379 redis:5.0.7
# 啓動redis客戶端
redis-cli -h 10.25.208.66
# 測試一下
10.25.208.66:6379> set test value
OK
10.25.208.66:6379> get test
"value"
10.25.208.66:6379>

5.5 ZooKeeper

docker pull zookeeper:3.5.6
# 注意這裏沒有用端口映射,也可以用上,雖然本機上有zookeeper,但是綁定端口的方式上面redis已經用過了,來點不一樣的
docker run -di --name zk zookeeper:3.5.6
# 由於沒有映射,所以外部是不能訪問的,如下命令:啓動一個zookeeper鏡像,並且運行這個鏡像內的zkCli.sh命令,命令參數是-server zookeeper
docker run -it --rm --link zk:zookeeper zookeeper:3.5.6 zkCli.sh -server zookeeper
# 然後就能連上隨意操作了
# zk集羣參考https://segmentfault.com/a/1190000006907443

6 備份、遷徙

6.1 將容器保存爲鏡像

之前修改的內容就能得以保存了

docker commit 容器名稱 新起的鏡像名字 
docker ps #直看

6.2 備份鏡像

docker save -o filename 鏡像名稱

6.3 恢復鏡像

docker load -i filename
發佈了16 篇原創文章 · 獲贊 28 · 訪問量 2915
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章