一、docker依賴的基礎環境
- 64-bit CPU
- Linux kernel 3.10以上
- Linux Kernel支持namespace和CGroups
二、docker安裝
1. 環境如下
[root@docker1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@docker1 ~]# uname -r
3.10.0-693.el7.x86_64
2. 默認下載的話會從extras庫中下載1.13的版本(我用的阿里鏡像源)。但是現在的docker正處於快速生長、快速健全的階段,所以還是建議自建docker.repo文件下載最新的版本。
# 直接使用extras源下載docker以docker的安裝包名就能下載,但使用指定源下載需要以docker-ce的安裝包名。
[root@docker1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker1 ~]# yum -y install docker-ce
3. 配置docker鏡像加速器,否則鏡像的速度會很慢。可以使用docker中國,也可以使用各大雲廠商的鏡像加速,此處以阿里雲為例,需要先注冊賬戶才可以。docker配置文件默認在/etc/docker下面,需要手動創建。
[root@docker1 ~]# mkdir /etc/docker
# 將上面阿里雲鏡像加速器中大括號部分復制到下面配置文件就可以了。內容以數組形式存在,所以按格式配置多個加速器也沒關系。
[root@docker1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"]
}
三、docker啟動及常用命令
基本信息
- 啟動docker
[root@docker1 ~]# systemctl start docker.service
# 鍵入docker命令查看幫助。
[root@docker1 ~]# docker
Usage: docker [OPTIONS] COMMAND
Options: # 參數
Management Commands: # 新版docker分的管理組(只列出部分內容)
container Manage containers
Commands: # docker一些未分組命令及舊版命令的整合
- 查看docker的C/S版本信息
[root@docker1 ~]# docker version
Client:
Version: 18.09.6
API version: 1.39
Go version: go1.10.8
...略
Server: Docker Engine - Community
Engine:
Version: 18.09.6
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
...略
- 查看docker的使用信息,只摘取部分配置
root@docker1 ~]# docker info
Containers: 0 # 當前系統容器的個數
Running: 0 # 處於運行狀態的容器個數
Paused: 0 # 處於暫停狀態的容器個數
Stopped: 0 # 處於停止狀態的容器個數
Images: 0 # 下載的鏡像個數
Server Version: 18.09.6 # docker的版本
Storage Driver: overlay2 # 存儲驅動,之前這里是dm,性能很差,是lvm的實現,新版本的都是overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file # 日志文件驅動
Cgroup Driver: cgroupfs # CGroup驅動
Plugins: # 支持的插件種類
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Registry Mirrors: # 此處是我們配置的鏡像加速器
https://p4y8tfz4.mirror.aliyuncs.com/
Product License: Community Engine # 社區版本
鏡像管理
- 搜索鏡像
[root@docker1 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11472 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1604 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 715 [OK]
# NAME列:沒有斜線分隔的名字稱為頂級倉庫,一般屬於docker hub官方所有;有斜線分隔符的稱為用戶倉庫或者是項目倉庫,docker hub官方允許用戶個人注冊賬戶建立自己的倉庫。
# DESCRIPTION列:倉庫描述
# STARS列:用戶表示“贊”的個數
- 下載鏡像。自己使用docker下載鏡像一般都是使用alpine版,它能夠給你的程序運行提供基礎環境,而且體積非常小。而生產中不建議使用,因為即便是docker hub官方的鏡像也是不帶調試工具的,這於我們調試容器很不利,所以一般都是自行制作鏡像,包含常用的調試工具。
# 語法:docker image pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
[root@docker1 ~]# docker pull nginx:1.14-alpine
Status: Downloaded newer image for nginx:1.14-alpin
[root@docker1 ~]# docker pull busybox
Status: Downloaded newer image for busybox:latest
[root@docker1 ~]# docker pull redis
Status: Downloaded newer image for redis:latest
# 如果從第三方下載鏡像,需要指明倉庫地址,端口默認是https的443。
[root@docker1 ~]# docker pull quay.io/coreos/flannel
- 查看鏡像
# 所有非docker官方的鏡像倉庫名稱都會是倉庫地址+用戶/項目名+鏡像名
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest d3e3588af517 2 weeks ago 95MB
busybox latest 64f5d945efcc 2 weeks ago 1.2MB
nginx 1.14-alpine 8a2fb25a19f5 7 weeks ago 16MB
quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 4 months ago 52.6MB
# REPOSITORY列:倉庫名稱
# TAG列:標簽
# IMAGE ID列:鏡像ID,查看完整ID需要加--no-trunc的參數,默認顯示前12位。
# CREATED列:鏡像創建時間
# SIZE列:鏡像大小
- 刪除鏡像
[root@docker1 ~]# docker rmi redis:latest
容器管理
- 命令幫助
[root@docker1 ~]# docker run --help.
-d # 后台運行容器.
-i # 使用交互式訪問容器.
-t # 分配一個終端,需要與-i結合使用.
--name # 給容器分配個名字.
--network string # 使容器加入到一個網絡,如不指定,默認就是加到bridge網絡(可以使用docker network ls查看),使用docker0的虛擬網卡.
--rm # 容器一停,就自動刪除.
- 創建並啟動一個容器(一步到位)
[root@docker1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 64f5d945efcc 2 weeks ago 1.2MB
nginx 1.14-alpine 8a2fb25a19f5 7 weeks ago 16MBquay.io/coreos/flannel v0.11.0-amd64 ff281650a721 4 months ago 52.6MB
# 直接創建、啟動並登入容器(啟動容器的鏡像可以不用提前下載,執行run命令的時候會自動下載)
[root@docker1 ~]# docker run --name bbox -it busybox:latest
/ #
--------------------------------------------------------------------------------------------------------------
>>小測試:使用httpd起一個web服務進行訪問<<
/ # mkdir -p /data/html/
/ # echo 'Bbox httpd server' /data/html/index.html
/ # httpd -f -h /data/html/
# 然后復制一個窗口訪問web服務
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24b44e5f1049 busybox:latest "sh" 3 hours ago Up 3 hours bbox
# 使用inspect顯示容器的詳細信息。
[root@docker1 ~]# docker container inspect bbox | grep IPAddress
"IPAddress": "172.17.0.2",
[root@docker1 ~]# curl 172.17.0.2
Bbox httpd server # 訪問OK
--------------------------------------------------------------------------------------------------------------
# 此時回到啟動httpd的窗口,Ctrl+c中止進程,exit或者Ctrl+d退出容器,此時的容器並沒有被刪除,只是處於停止狀態
/ # httpd -f -h /data/html/
^C
/ # [root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24b44e5f1049 busybox:latest "sh" 3 hours ago Exited (130) 3 minutes ago bbox
- 啟動一個容器
# 如果容器是一個后台守護進程,那直接start就可以了,如果需要直接進入交互式接口,需要加-ai的參數
[root@docker1 ~]# docker start -ai bbox
/ #
- 停止一個容器
# stop和kill區別就是:stop是發送15的信號,kill是發送9的信號。kill是強制殺死,有丟失數據的可能,所以一般不建議使用。
[root@docker1 ~]# docker stop bbox
bbox
- 刪除一個容器
[root@docker1 ~]# docker rm bbox
bbox
- 啟動一個后台運行的容器
[root@docker1 ~]# docker run --name web01 -d nginx:1.14-alpine
c386de457f5fed770e97a080bbf7d2ce05cabd38199a9fc9072d08d920cf58f6
[root@docker1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c386de457f5f nginx:1.14-alpine "nginx -g 'daemon of…" 20 seconds ago Up 19 seconds 80/tcp web01
[root@docker1 ~]# docker inspect web01 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@docker1 ~]# curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title> # 訪問成功
- 登入后台運行的容器
[root@docker1 ~]# docker exec -it web01 /bin/bash
root@c386de457f5f:/
- 查看容器訪問日志
# 一般情況下容器只會運行程序這一個進程,日志都是保存在於宿主機上的,可以用下面命令查看。
[root@docker1 ~]# docker logs web01
172.17.0.1 - - [30/May/2019:07:12:43 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
寫作不易,轉載請注明出處,謝謝~~