[TOC]
## 1.容器操作
### 1.1.运行容器
```
docker run -i -t ubuntu /bin/bash
-i:表示容器中的STDIN是开启的
-t:分配伪TTY
只有在指定的/bin/bash命令处于运行状态的时候,容器才会处于运行状态。一旦退出容器,/bin/bash命令也就结束了,容器随之停止。
```
![](https://img.kancloud.cn/2a/5a/2a5a12d887f4edf747ae91362b9a3667_749x49.png)
### 1.2.容器命名
创建容器时会随机生成一个名称,也可以使用`--name`参数指定容器名。
```
docker run --name container_name -i -t ubuntu /bin/bash
```
![](https://img.kancloud.cn/9f/8d/9f8de032a0011acc47fe6406c6e1501e_1169x142.png)
### 1.3.重新启动已停止的容器
```
// 重启
docker start ubuntu_dev
或
docker start container_id
```
容器重新启动后运行一个交互式会话shell,可以用docker attach 命令重新附着到该容器的会话上。
```
docker attach ubuntu_dev
```
![](https://img.kancloud.cn/0a/49/0a491902d99ad01a0115dcdcc7249650_1060x189.png)
### 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
```
![](https://img.kancloud.cn/ef/27/ef278bbe42420a0bcdce9c655eafaff6_544x215.png)
```
// 查看容器内的进程
docker top daemon_dave
```
![](https://img.kancloud.cn/d8/43/d843371c93ecd3b12e2ff67d5e71a57d_844x187.png)
```
// 在容器内部运行进程,在容器内部创建一个文件
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指南
- 小操作