Docker 使用入門
下載並安裝Docker
在有網的電腦上安裝Docker,簡直輕而易舉,以下要討論的是如何離線安裝Docker
-
準備環境
- Centos 7 的linux主機一臺
- 新安裝的有網的linux虛擬機一臺
-
大致步驟
- 在有網的虛擬機中,下載docker rpm及其依賴的rpm包
- 將這些rpm包導入到 離線的linux主機中
- 手工安裝 這些 rpm包
- 測試是否完成
- 注意: 兩臺主機的系統版本應一致或非常接近
-
在虛擬機中輸入以下命令
- 添加 Docker 官方的yum源
$ yum-config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo $ yum clean all && yum makecache
- 下載 yumdownloader 軟件
$ yum install -y yum-utils
- 使用yumdownloader 下載docker rpm包及其依賴包
$ yumdownloader docker-ce --resolve --destdir=/root/package
- 查看是否下載成功
$ ls /root/package
-
安裝docker
- 安裝rpm包
$ cd package $ rpm -ivh *.rpm --no-deps --force
- 啓動docker
$ systemctl enable docker $ systemctl start docker
- 檢查是否安裝成功(剛安裝好,無鏡像,無容器)
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
安裝注意事項
- 有網的虛擬機必須沒有安裝過docker,最好什麼軟件都沒安裝過
- 因爲yumdownloader只會下載本機沒有的rpm包
- 如果那臺虛擬機已經安裝過了docker,文件夾內就不會有哪些依賴的rpm包
- 從而導致安裝失敗
- 安裝不同版本的docker
- 目前官方鏡像源只有 centos 7,無 centos 6 的下載包
初步使用 (未完待續)
基礎使用步驟
- 搜索所需的docker
docker search nginx
[root@VM_0_7_centos ~]# docker search nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Official build of Nginx. 12457 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1716 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 751 [OK]
- 從倉庫中拉取到本地
docker pull nginx
- 查看拉取的鏡像
docker images
- 運行docker鏡像(將鏡像轉爲容器,並運行該容器)
docker run -d nginx
- 查看docker 容器狀態
docker ps
- 進入 docker容器
docker exec -it container_id /bin/bash
- 啓停容器
docker start/stop/restart container_id
獲取鏡像的幾種方式
-
搜索引擎,直接使用別人做好的鏡像
- dockerHub
- 代碼github搜索
-
從基礎鏡像構建
docker build -t tag:version path
- 使用Dockerfile,見官網
導出/導入鏡像
load / save
docker save -o image.tar image_id
docker load -i image.tar
- 導入以後,鏡像是沒有名字
docker images
[root@VM_0_7_centos jupyter_notebooks]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> f391e4875ff0 11 days ago 126 MB
- 添加倉庫和tag名
docker tag image_id res/tag:1.0
REPOSITORY TAG IMAGE ID CREATED SIZE
res/tag 1.0 f391e4875ff0 11 days ago 126 MB
export import
- export 不可以導出鏡像,只能導出容器
- 查看所有容器
docker container ls
docker ps -a
- 導出
docker export -o image.tar container_id
- 導入
docker import image.tar res/tag:1.1
區別與共同點
- export 只能導出容器,save 只能導出鏡像,但兩者都是打包成鏡像
- 一般export 導出的,使用 import 導入,save 導出的包使用 load 導入
- 特殊情況 export 導出的不可load,save導出的包 可以import
- export 會把容器的所有文件都打包,而save 只會將鏡像本身,不包括額外添加到鏡像的文件,這點需要注意
如何啓動一個Docker
- docker 從原理上說,可以作爲一個完整的操作系統使用,但正常使用應該當作一個服務來使用
- 也就是隻使用
start/stop/restart
啓動應用,儘量不適用 exec 進去操作 - 也就是搭配Docker 進行使用
Docker 如何修改內核參數,修改socket 最大連接數
root@78f57402fb35:/# echo "net.core.somaxconn = 30000" >> /etc/sysctl.conf
root@78f57402fb35:/# sysctl -p
sysctl: setting key "net.core.somaxconn": Read-only file system
root@78f57402fb35:/#
- 在運行時使用
--privileged
參數,即可修改成功,sysctl -w net.core.somaxconn=128
也可修改
[root@VM_0_7_centos ~]# docker run -it --privileged 48c bash
root@fe0be6f2b1dd:/# echo "net.core.somaxconn = 30000" >> /etc/sysctl.conf
root@fe0be6f2b1dd:/# sysctl -p
net.core.somaxconn = 30000
root@fe0be6f2b1dd:/#
root@fe0be6f2b1dd:/# sysctl -a | grep maxconn
net.core.somaxconn = 30000
docker run
- docker run [options] image [command]
- docker run 由三部分組成, option 表示一些可選選項,image 表示鏡像,command 是要執行的命令
- docker 先尋找存不存在本地鏡像,如不存在,會去dockerHub進行尋找,如dockerHub也無法尋找,則報錯
- docker 運行方式分爲兩種
- 創建容器並進入docker
docker run -it image bash
- 創建容器在後臺運行,並返回container_id
docker run -d image
- 進入容器後,按下
Ctrl + P + Q
可以使得容器在後臺運行,退出容器並保持容器的狀態 - 也就是
docker run -it image bash
然後Ctrl + P + Q
實現docker run -d image
的效果
- 創建容器並進入docker
- 常用參數
-v
將宿主機的文件映射到容器的文件,有點類似於linux 中的軟鏈接, 需要使用絕對路徑-p
暴露端口,並進行映射-P
暴露所有端口
- 參考文件
docker run -dit --privileged -p 8889:8889/tcp \
-v "/usr/local/src/device_control_project/scripts:/usr/local/src/project/scripts/" \
-v "/usr/local/src/device_control_project/logs/:/usr/local/src/project/logs/" \
-v "/usr/local/src/device_control_project/device_control/:/usr/local/src/project/device_control/" \
ezcloud/device_control:3.6.8 /bin/bash /usr/local/src/project/scripts/startup.sh
- 查看容器
docker ps
- 進入容器
docekr exec -it xxx bash