本篇博文理論知識比較少,較多實操,但比較糙,能夠當作docker入門的博文來看,後面講的k8s沒有資源,仍是那句話:基礎不牢,地動山搖.但我仍是把它記錄下來了,得"一步一個腳印,作大作強,再創輝煌.--電影<<無名之輩>>".以後的博文寫的內容都是mage的docker跟k8s,質量有保證,你們能夠放心閱讀.linux
1.安裝nginx
# k8s官方要求是使用docker1.12.6版本的,因此爲了之後少踩坑,咱們用阿里雲的docker-ce源或者epel源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 或者 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 或者 yum -y install epel-release yum -y install docker bash-completion systemctl start docker systemctl enable docker docker info ... Server Version: 1.13.1 ... # 阿里雲登陸網址:https://cr.console.aliyun.com # 爲你的docker配置加速器 vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd-current --registry-mirror=https://a14c78qe.mirror.aliyuncs.com \ systemctl daemon-reload systemctl restart docker.service docker daemon --help # 能夠查看到全部支持的參數 解決報錯: Failed to start Docker Application Container Engine -- Subject: Unit docker.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- Unit docker.service has failed. -- The result is failed. Unit docker.service entered failed state. docker.service failed.
這是由於在啓動腳本里加了這一行--registry-mirror,加這一行的時候必定要注意橫線的輸入法,我這裏是格式寫錯了,致使啓動腳本有問題,格式正確以後,啓動正常,因此說:操做規範化,可讓咱們少踩不少坑.docker
# 還能夠這樣去添加加速器,這是阿里官網上推薦的 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://jh4x39ut.mirror.aliyuncs.com"] } EOF # 目前docker保存在本地的路徑是/var/lib/docker,若是想要改變路徑則,在啓動腳本中添加 --graph=/data/docker
2.鏡像管理json
a.獲取鏡像--語法:docker pull NAME[:TAG]vim
NAME是鏡像倉庫的名稱(用來區分鏡像),TAG是鏡像的標籤(用來表示版本信息)centos
b.搜索鏡像bash
docker search [image-name]:從docker倉庫搜索docker鏡像,後面是關鍵詞服務器
c.查看鏡像ssh
docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/alpine latest caf27325b298 2 weeks ago 5.53 MB 來自於哪一個倉庫/鏡像名 鏡像標籤 鏡像ID 建立時間 鏡像大小 docker inspect {IMAGE_ID | IMAGE_NAME}:獲取鏡像詳細信息 docker pull nginx docker inspect nginx # 返回的是一個JSON格式的消息,若是咱們只要其中一項內容時,可使用參數-f來指定,例如獲取鏡像的Architecture docker inspect -f {{".Architecture"}} nginx amd64 # 以上是服務器可以聯網的狀況下獲取鏡像的方法,docker默認也提供了離線方法 docker save nginx >/opt/nginx.tar.gz # 鏡像導出 ssh-copy-id -i ~/.ssh/id_dsa.pub root@10.0.0.21 # 作一下主機互信 scp /opt/nginx.tar.gz root@10.0.0.21:/opt docker load < /opt/nginx.tar.gz Loaded image: docker.io/nginx:latest # 用 docker images 能夠看到離線load,和在線安裝的效果是同樣的
d.運行鏡像報錯curl
docker run -it alpine sh /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:245: running exec setns process for init caused \"exit status 17\"". 找了不少博客,都沒有在本質上說明緣由,太亂太雜,最後只能升級內核,不肯定是否是內核版本低致使的,但升級了以後,解決問題了. 未升級以前的內核版本:CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) # 導入yum源的認證key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 安裝yum源 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # 在yum的elrepo源中,有mainline(4.0.2)這個內核版本 yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y # 查看默認啓動順序 awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg # 默認啓動的順序是從0開始 grub2-set-default 0 && reboot uname -r 4.20.10-1.el7.elrepo.x86_64
CentOS 7.0運行Docker出現內核報錯解決方法:https://www.linuxidc.com/Linux/2015-05/118084.htm
e.查看容器
docker ps -a # 查看全部的容器 docker ps # 查看正在運行的容器 docker run -it alpine sh # 當exit退出時,容器會關閉,不想讓其關閉,能夠按住Ctl,按一下p鍵,按一下q鍵 docker run -it --rm --name mynginx nginx -i:interactive交互式的 -t:TTY終端 --rm:退出時,自動刪除容器,生產環境慎用 --name:運行鏡像時,會給這個容器隨機起一個名字,此參數能夠自定義名字 啓動nginx鏡像的默認命令是:nginx -g "daemon off" 進入容器的三種方法 docker attch mynginx # 這個不實用 docker exec -it mynginx sh # 這個最經常使用 第三種方法得找到容器的pid yum install -y net-tools cat docker_in.sh pid=`docker inspect --format "{{.State.Pid}}" $1` nsenter -t $pid -m -u -i -n -p
f.刪除鏡像
docker rmi centos:用來刪除指定鏡像,其中後面的參數能夠是tag,若是是tag時,其實是刪除該tag,只要該鏡像還有其餘tag,就不會刪除該鏡像.當後面的參數爲鏡像ID時,則會完全刪除整個鏡像,連同全部標籤一同刪除.docker rmi -f centos:強制刪除,通常不建議使用,後續可能會出現一些問題.
剛纔那種啓動方式,在前臺就這麼夯住了,不實用,使用-d讓其後臺運行,docker run -it -d --name secondnginx nginx,--rm和-d是衝突的,不能同時使用.如何刪除一個正在運行的容器?要麼強制刪,要麼中止以後再刪:docker rm -f 容器ID或者docker stop 容器ID && docker rm 容器ID.
g.獲取內部配置
# 獲取鏡像nginx的內部配置能夠用兩種方式 docker inspect --format "{{.ContainerConfig.Hostname}}" nginx docker inspect -f {{.ContainerConfig.Hostname}} nginx # 獲取容器的內部配置也是這兩種方式 # 查看日誌 curl 172.17.0.3 docker logs secondnginx # 或者使用容器ID的前三位 docker logs -f secondnginx # 查看連續日誌
Docker初識:https://blog.51cto.com/jinlong/2104972