[TOC]
## 1.容器操作
### 1.1.運行容器
```
docker run -i -t ubuntu /bin/bash
-i:表示容器中的STDIN是開啟的
-t:分配偽TTY
只有在指定的/bin/bash命令處于運行狀態的時候,容器才會處于運行狀態。一旦退出容器,/bin/bash命令也就結束了,容器隨之停止。
```

### 1.2.容器命名
創建容器時會隨機生成一個名稱,也可以使用`--name`參數指定容器名。
```
docker run --name container_name -i -t ubuntu /bin/bash
```

### 1.3.重新啟動已停止的容器
```
// 重啟
docker start ubuntu_dev
或
docker start container_id
```
容器重新啟動后運行一個交互式會話shell,可以用docker attach 命令重新附著到該容器的會話上。
```
docker attach ubuntu_dev
```

### 1.4.創建守護式容器
```
docker run --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1; done"
-d:容器會在后臺運行。
-c:在容器里運行一個while循環,每隔一秒打印hello world。
```
```
// docker logs 獲取容器的日志
docker logs daemon_dave
// -f參數來監控Docker的日志
docker logs -f daemon_dave
// 獲取最后5行內容
docker logs --tail 5 daemon_dave
// 跟蹤最新日志
docker logs --tail 0 -f daemon_dave
// -t 給日志加上時間戳
docker logs -ft daemon_dave
```

```
// 查看容器內的進程
docker top daemon_dave
```

```
// 在容器內部運行進程,在容器內部創建一個文件
docker exec -d daemon_dave touch /etc/test_file
// 在容器內創建一個新的bash會話
docker exec -t -i daemon_dave /bin/bash
```
### 1.5.自動重啟容器
```
docker run --restart=always --name ubuntu_dev -d ubuntu /bin/bash
--restart:會檢查容器的退出代碼,重啟容器,默認不會自動重啟
--restart=always:無論容器的退出代碼是什么,都會自動重啟。
--restart=on-failure:當容器的退出代碼是0時才會自動重啟
--restart=on-failure:5:當容器退出代碼非0時,自動重啟5次。
```
### 1.6.其他常用命令
```
// 刪除容器
docker rm container_id 或 docker rm names
// 刪除所有容器
docker rm `docker ps -a -q`
-q:返回容器ID
// 查看正在運行的容器
docker ps
// 查看所有容器
docker ps -a
// 獲取容器信息,包括名稱、命令、網絡配置等。
docker inspect names
-f 或者--fromat參數指定查詢信息
docker inspect --format='{{ .State.Running }}' names
// 查看容器啟動時的完整Command
docker ps -a --no-trunc
```
### 1.7.構建鏡像
`docker commit`(不推薦)
```
// 創建一個需要定制的容器
docker run -it ubuntu /bin/bash
// 在容器內執行
apt-get -y update
apt-get install apache2
// 退出容器執行docker commit
docker commit container_id sunlightlei/apache2
// 查看剛剛創建的容器的ID
docker ps -l -q
// 可以添加描述,使用方法類似git提交
docker commit -m="first commit" --author="sunl" container_id sunlightlei/apache2
```
`Dockerfile`(推薦)
```
// 創建工作目錄
mkdir workspace && cd workspace
// 編寫Dockerfile
vi Dockerfile
# Version: 0.0.1
FROM ubuntu
MAINTAINER sunl "*****@**.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
EXPOSE 80
// 構建鏡像
docker run build -t="sunlightlei/nginx"
// 構建鏡像帶標簽
docker run build -t="sunlightlei/nginx:v1"
```
**構建緩存**
由于每一步的構建過程都會將結果提交為鏡像,之前的鏡像層看做緩存。所以如果第4步出了問題,重新構建時將從這里開始。
如果不用緩存,使用`--no-cache`。
**構建緩存可以實現簡單的Dockerfile模板**
### 1.8.從新鏡像啟動容器
```
docker run -d -p 80 --name webserver sunlightlei/nginx -g "daemon off;"
// 查看端口映射情況
docker ps -l
// 將容器內的80端口綁定的宿主機的指定端口上
docker run -d -p 8080:80 --name webserver sunlightlei/nginx -g "daemon off;"
// 將容器內的80端口綁定到宿主機的127.0.0.1這個IP的80端口上
docker run -d -p 127.0.0.1:80:80 --name webserver sunlightlei/nginx -g "daemon off;"
// 可以通過在端口綁定時綁定使用/udp后綴來指定UDP端口
// 使用-P參數,可以對外開放Dockerfile中的EXPOSE指令中設置的所有端口。綁定的宿主機一個隨機端口。
docker run -d -P --name webserver sunlightlei/nginx -g "daemon off;"
```
### 1.9.容器的生命周期
容器的生命周期為5種:
1. created:初建狀態
2. running:運行狀態
3. stopped:停止狀態
4. paused: 暫停狀態
5. deleted:刪除狀態
通過docker create 命令生成的容器狀態為初建狀態;
初建狀態通過docker start轉換為運行狀態;
運行狀態通過docker stop轉換為停止狀態;
處于停止狀態的容器通過docker start轉換為運行狀態;
運行狀態的容器通過docker pause轉換為暫停狀態;
暫停狀態通過docker unpause 轉換為運行狀態。
四態容器都可以刪除。
- Golang
- 基礎知識
- 基本數據類型
- 運算符
- 變量&常量
- 流程控制
- 數組
- 切片
- string操作
- Map及實現原理
- Go其他
- CLI命令
- Golang內置類型和函數
- init函數和main函數
- 網絡編程
- 互聯網協議
- socket編程
- 單元測試
- 并發編程
- channel
- 優雅地關閉channel
- Mutex
- GMP原理與調度
- Go Web
- HTTP Server
- gin框架
- 快速入門
- HTML渲染
- JSONP
- Multipart/Urlencoded綁定
- PureJSON
- gin路由
- beego框架
- Bee工具安裝
- 配置模塊
- Web模塊
- 路由
- 數據操作
- Go操作Mysql數據庫
- Go操作redis
- mongo-driver
- sqlx庫
- 操作etcd
- msgpack
- 網絡爬蟲
- 獲取頁面
- 標準庫
- IO操作
- 文件操作
- fmt
- 格式化輸出
- flag
- log
- time
- strconv
- template
- os
- sync.Mutex
- Context
- 第三方庫
- zap庫
- viper
- validator參數校驗
- GORM
- 基礎
- CRUD接口
- INI
- GoFrame
- 快速開始
- 微服務
- go-kit
- gRPC
- Protocol Buffers 語法指南
- go-zero
- 相關名詞解釋
- 數據結構和算法
- 基礎知識
- 鏈表
- Golang GUI
- fyne基礎
- 顯示時間
- RabbitMQ-Go
- centos7 安裝rabbitmq-server
- RabbitMQ介紹
- 工作隊列
- Go設計模式
- 設計模式的分類
- 簡單工廠模式
- golang自舉編譯
- 了解sync.Once
- 知識碎片
- 常見問題
- 開源項目
- Python
- Anaconda
- 介紹、使用教程
- Python基礎知識
- Python之禪
- 變量和類型
- 流程控制
- Python運維
- Python內置工具
- 命令行工具
- 包管理工具pip
- 小爬蟲筆記
- I/O操作
- requests庫
- requests基本使用
- BeautifulSoup庫
- BeautifulSoup基本使用
- Scrapy框架
- 數據可視化
- Django
- Django起步
- OpenCV
- OpenCV入門
- 前端
- HTML
- CSS
- CSS權重計算
- Javascript
- 基礎
- JS基礎知識
- 監聽事件
- 字符串操作
- 數組操作
- 輸入輸出
- 定時器
- 樣式操作
- 獲取url參數
- Typescript
- Pick 與 Omit TS內置類型
- Vue.js
- Vue.js介紹
- Vue.js基礎
- Vue指令
- v-model
- v-for
- 指令修飾符
- Q&A
- 命令
- Vue3
- node.js
- node.js基礎
- npm遇到的問題
- 相關工具安裝
- nvm使用教程
- 工程化webpack
- Linux
- Linux基礎
- 符號鏈接
- Shell
- 腳本執行方式
- 數據的輸入輸出
- 腳本執行中的問題
- tcpdump
- 正則表達式
- Elasticsearch
- Docker
- Docker的基礎概念與操作
- Docker 安裝
- 容器技術原理
- Docker核心概念
- Docker基本操作
- 鏡像相關操作
- 容器相關操作
- 鏡像加速器
- Dockerfile
- COPY復制文件
- Docker所遇問題
- ansible
- ansible入門
- k8s
- 安裝工具
- kubectl
- Git
- gitlab
- gitlab備份與恢復
- gitlab基本使用
- git使用
- git常用命令
- git提交問題
- git提交規范
- 數據庫
- MySQL
- MySQL介紹
- mariadb安裝
- 主主復制
- 數據庫問題集結
- 開啟binlog
- MySQL常用命令
- SQL總結
- MySQL性能優化系列
- 第一章 初始化安裝和簡單安全加固
- 第二章 認識performance_schema
- 第三章 MySQL體系結構
- MySQL配置模板
- Redis
- Redis簡單使用
- Redis常見問題
- Redis集群
- Redis Cluster概述
- 數據分布
- 搭建集群
- MongoDB
- mongodb分片
- MongoDB分片集群設置密碼驗證
- TiDB
- 單機模擬部署生產環境集群
- 服務器
- CentOS
- 配置阿里云的yum源和epel源
- centos7 實現NFS文件共享
- rsync
- centos7 源碼編譯rsync
- rsync實現文件同步
- 添加刪除swap分區
- 清除buff/cache
- 配置ntp時間同步
- centos7安裝pip
- centos7虛擬機啟動報xfs錯誤
- centos7常用命令
- centos7安裝mysql
- centos7安裝python3.x
- centos7升級gcc、g++
- centos7安裝nginx
- centos7部署Nexus
- centos7離線安裝python3
- centos7.6編譯mariadb10.5.22
- CentOS8
- 銀河麒麟V4
- nginx編譯
- 銀河麒麟V10_x86
- 安裝VNC
- 單用戶模式
- UOS
- 配置本地apt源
- apt安裝vnc-server
- UOS單用戶模式
- UOS創建自啟動腳本
- 源碼編譯
- oniguruma編譯
- Proxmox VE
- PVE基本使用
- PVE故障
- KVM
- KVM相關命令
- 銀河麒麟V10_x86安裝kvm
- UOS_arm64安裝kvm
- yum、rpm、apt
- dpkg、apt-get、yum和rpm的區別
- rpm打包
- yum相關問題
- 內建銀河麒麟的apt源
- 其他軟件
- JuiceFS
- nacos
- 常見命令
- 硬盤分區
- Linux常見問題
- 測試
- sysbench
- 其他
- Cloc代碼統計工具
- onlyoffice 在線文檔編輯
- onlyoffice添加中文字體
- 遇到的問題
- 網絡通信協議
- 部署相關記錄
- Vmware workstation虛擬機遷移到PVE指南
- 小操作