CentosOS Docker安裝
Docker支持以下的64位centos安裝:
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
可以通過命令**docker command --help**更深入的了解指定的 Docker 命令使用方法。
例如我們要查看**docker stats**指令的具體使用方法:
~~~
runoob@runoob:~# docker stats --help
~~~
~~~
docker run -it ubuntu /bin/bash
~~~
* **\-i**: 交互式操作。
* **\-t**: 終端。
* **ubuntu**: ubuntu 鏡像。
* **/bin/bash**:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。
~~~
docker start b750bbbcfd88
~~~
~~~
docker run -itd --name ubuntu-test ubuntu /bin/bash
~~~
加了-d參數默認不會進入容器,想要進入容器需要使用指令**docker exec**(下面會介紹到)。
停止一個容器
~~~
docker stop <容器 ID>
~~~
### 進入容器
在使用\*\*-d\*\*參數時,容器啟動后會進入后臺。此時想要進入容器,可以通過以下指令進入:
* **docker attach**
* **docker exec**:推薦大家使用 docker exec 命令,因為此退出容器終端,不會導致容器的停止。
### 導出和導入容器
如果要導出本地某個容器,可以使用**docker export**命令。
~~~
docker export 1e560fca3906 > ubuntu.tar
~~~
~~~
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
~~~
此外,也可以通過指定 URL 或者某個目錄來導入,例如:
~~~
docker import http://example.com/exampleimage.tgz example/imagerepo
~~~
### 刪除容器
刪除容器使用**docker rm**命令:
~~~
docker rm -f 1e560fca3906
~~~
下面的命令可以清理掉所有處于終止狀態的容器。
$ docker container prune
我們可以使用?**docker images**?來列出本地主機上的鏡像。
我們如果要使用版本為15.10的ubuntu系統鏡像來運行容器時,命令如下:
~~~
runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
~~~
~~~
docker search httpd
~~~
~~~
docker run httpd
~~~
~~~
docker rmi hello-world
~~~
我們可以通過命令 docker commit 來提交容器副本。
~~~
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
~~~
**docker images**
使用我們的新鏡像**runoob/ubuntu**來啟動一個容器
~~~
runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash
~~~
### 構建鏡像
我們使用命令**docker build**?, 從零開始來創建一個新的鏡像。為此,我們需要創建一個?Dockerfile?文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像
通過?docker build?命令來構建一個鏡像。
~~~
docker build -t runoob/centos:6.7 .
~~~
* **\-t**:指定要創建的目標鏡像名
* **.**:Dockerfile?文件所在目錄,可以指定Dockerfile?的絕對路徑
容器中可以運行一些網絡應用,要讓外部也可以訪問這些應用,可以通過-P或-p參數來指定端口映射。
我們使用\*\*-P**參數創建一個容器,使用**docker ps\*\*可以看到容器端口 5000 綁定主機端口 32768。
* **\-P :是容器內部端口隨機**映射到主機的高端口。
* **\-p :是容器內部端口綁定到指定**的主機端口。
外,我們可以指定容器綁定的網絡地址,比如綁定 127.0.0.1。
~~~
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
~~~
默認都是綁定 tcp 端口,如果要綁定 UDP 端口,可以在端口后面加上\*\*/udp\*\*。
**docker port**命令可以讓我們快捷地查看端口的綁定情況。
當我們創建一個容器的時候,docker 會自動對它進行命名。另外,我們也可以使用\*\*--name\*\*標識來命名容器,例如:
~~~
docker run -d -P --name runoob training/webapp python app.py
~~~
下面先創建一個新的 Docker 網絡。
~~~
docker network create -d bridge test-net
~~~
**\-d**:參數指定 Docker 網絡類型,有 bridge、overlay。
通過network選項加入帶指定網絡。
下面先創建一個新的 Docker 網絡。
~~~
docker network create -d bridge test-net
~~~
運行一個容器并連接到新建的 test-net 網絡:
~~~
docker run -itd --name test1 --network test-net ubuntu /bin/bash
~~~
給已有鏡像制作新tag
~~~
docker tag ubuntu:18.04 username/ubuntu:18.04
~~~
~~~
docker image ls
~~~
~~~
docker push username/ubuntu:18.04
~~~
~~~
docker search username/ubuntu
~~~
### 什么是 Dockerfile?
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。
### 使用 Dockerfile 定制鏡像
Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大。例如:
**## Docker Compose**
Compose 是用于定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建并啟動所有服務。
<br/><br/>
## **dockerfile**
FROM指定基礎鏡像,即當前鏡像是基于哪個鏡像的
MAINTAINER指定作者
RUN指定構建過程中需要運行的命令
ENV設置環境變量
WORKDIR指定默認的工作目錄,即進入容器后默認進入的目錄
VOLUME創建掛載點,也稱容器數據卷,用于數據共享和持久化
CMD指定容器啟動時要運行的命令,與RUN不同的是,這些命令不是在鏡像構建過程中執行的
ENTRYPOINT指定容器啟動時要運行的命令,與CMD有區別
COPY拷貝文件/目錄到鏡像中
ADD拷貝文件到鏡像中,且會自動解壓縮
EXPOSE指定對外暴露的端口
COPY與ADD的區別,COPY只能是本地文件且不會自動解壓文件,不能訪問網絡資源,add可以訪問網絡資源,類似wget。
Dockerfile其實可以看做一個命令集。每行均為一條命令。每行的第一個單詞,就是命令command。后面的字符串是該命令所要接收的參數。比如ENTRYPOINT /bin/bash。ENTRYPOINT命令的作用就是將后面的參數設置為鏡像的entrypoint。
https://www.cnblogs.com/ExMan/p/12982618.html
放個鏈接在這里,要是又忘了的話。
- 文章翻譯
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的過去,未來與現在
- Demystifying Istio Circuit Breaking
- 知識圖譜
- skill level up graph
- 一、運維常用技能
- 1.0 Vim (編輯器)
- 1.1 Nginx & Tengine(Web服務)
- 基礎
- 1.2 zabbix
- 定義
- 登錄和配置用戶
- 1.3 RabbitMQ(消息隊列)
- 原理
- RabbitMQ(安裝)
- 1.4虛擬化技術
- KVM
- 1.5 Tomcat(Web中間件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(負載均衡高可用)
- 1.9 Memcache(分布式緩存)
- 1.10 Zookeeper(分布式協調系統)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(運維自動化)
- 1.13 WAF(Web防火墻)
- 1.14 HAproxy負載均衡
- 1.15 NFS(文件傳輸)
- 1.16 Vim(編輯器)
- 1.17 Cobbler(自動化部署)
- 二、常用數據庫
- 2.1 MySQL(關系型數據庫)
- mysql主從復制
- 2.2 Mongodb(數據分析)
- 2.3 Redis(非關系數據庫)
- 三、自動化運維工具
- 3.1 Cobbler(系統自動化部署)
- 3.2 Ansible(自動化部署)
- 3.3 Puppet(自動化部署)
- 3.4 SaltStack(自動化運維)
- 四、存儲
- 4.1 GFS(文件型存儲)
- 4.2 Ceph(后端存儲)
- 五、運維監控工具
- 5.1 云鏡
- 5.2 ELK
- 六、運維云平臺
- 6.1 Kubernetes
- 6.2 OpenStack
- 介紹
- 安裝
- 七、Devops運維
- 7.1 理念
- 7.2 Devops運維實戰
- 八、編程語言
- 8.1 Shell
- 書籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法與數據結構
- 九、雜記
- 高優先級技能
- 知識點
- JD搜集
- 明顯的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遺漏知識點
- 1.18.3 GCP、azure、aliyun
- Azure文檔
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源碼學習
- Scheduler源碼
- 調度器入口
- 調度器框架
- Node篩選算法
- Node優先級算法
- pod搶占調度
- 入口
- 主要代碼結構
- new
- 文章翻譯
- Flannel
- 從二進制集群搭建
- 信息收集
- docker優化
- 1.2 shell
- 面試題
- grep awk sed 常見用法
- shell實踐
- 1.3 Data structure(數據結構)
- Calico
- Aliyun文檔以及重點模塊
- git
- 大數據組件
- 前端,后端,web框架
- cgroup,namespace
- 內核
- Linux搜集
- crontab
- centos7常用優化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能問題排查與分析
- 性能分析搜集
- 性能分析常用10條
- 網絡性能優化
- 文本處理命令
- sql
- Iptables
- python面試題
- iptables
- iptables詳細
- zabbix面試題,proj
- prometheus
- web中間件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平臺
- 書籍Linux應用技巧
- kafka
- kafka面試題
- ETCD
- Jenkins
- 3天補充的點
- K8s源碼
- K8s
- k8s實操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow問答精選
- 問題
- 我對于學習思考
- 修改ssh超時時間
- 課程目錄
- 運維與運維開發
- The Person
- 個人雜談
- mysql主從復制
- 對于工作的認識與思考