场景
最后更新于:2022-04-02 03:03:30
[TOC]
## 守护进程
`docker run --restart=always -d -p 8080:7890 ...`
## 进入交互页面
如: `docker run -it --rm ubuntu:14.04 bash`
```
-it: -i:交互式操作, -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,并不会立即删除,除非手动 docker rm。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是
```
## 后台运行容器
如 `docker run -d -p 8086:8086 --name my_influxdb influxdb`
```
-p : 映射端口
-d : 后台运行
--name : 指定容器名称
```
## 执行容器中的方法
`docker run -v $PWD/:/usr/src/go -w /usr/src/go golang go run test.go`
```
-v $PWD/:/usr/src/go 当前目录映射到/usr/src/go
-w /usr/src/go 容器当前工作目录
golang 指定容器名
```
## 一个容器进入多个窗口
attach 只能进入一个窗口,多个窗口下,命令也会同步显示
于是使用 exec 命令
如: 进入 go 容器中,同时运行 server.go 与 client.go
```
docker run -itd -v $PWD:/usr/src/go -w /usr/src/go golang
> e9526ca88dc...
//窗口一
docker exec -it e9526ca8 bash
go run server.go
//窗口二
docker exec -it e9526ca8 bash //另起一窗口,执行
go run client.go
```
## 清理所有处于终止状态的容器
查看所有已创建的容器
`docker ps -a`
清除所有终止状态的容器
`docker rm $(docker ps -a -q)`
## Dockerfile 制作镜像
Dockerfile
```
FROM nginx
RUN echo '" \
--message "修改了默认网页" \
[容器id | 容器名] \
nginx_idcpj:v2
//注释:
--author 作者,非必须
--message 修改内容
nginx_idcpj:v2 设置仓库与版本,可写与现有仓库名称一致,标签不一致 nginx:v2
```
### 慎用 docker commit
使用 `docker commit` 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知
### 推荐 Dockerfile,查看 `Dockerfile 定制镜像` 目录
## 上传本地所有镜像到注册服务器(内网服务器)
[这个脚本](https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh)
默认是本地注册服务器 `127.0.0.1:5000`
```
$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push_images.sh
$ ./push_images.sh ubuntu:latest centos:centos7
The registry server is 127.0.0.1
```
## docker 容器由于配置错误,无法启动
格式:`docker cp 容器id:docker容器中配置文件路径 主机路径`
eg: `docker cp eaaba6bd4423:/etc/mysql/mysql.conf.d/mysqld.cnf /root/mysqld.cnf `
修改完后在复制回去
`docker cp /root/mysqld.cnf eaaba6bd4423:/etc/mysql/mysql.conf.d/mysqld.cnf `
';