目录

标签: Docker

使用 Docker Run 命令为镜像创建新的容器并运行

docker run 表示为一个镜像创建新的容器,并运行。

操作实例

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run --name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

参考资料: https://www.runoob.com/docker/docker-run-command.html

使用 Docker Save 命令导出镜像文件

docker save 命令可以将指定镜像导出为 tar 文件。
使用方法如下:

docker iamges     //使用该命令查看镜像列表
docker save -o test.tar test/ubuntu:latest      //导出指定的镜像

执行后没有报错,即表示操作成功。

参数说明

-o 表示输出到磁盘,并填写路径(可以是绝对路径或相对路径),如 “test.tar”
test/ubuntu:latest 表示镜像名称 test/ubuntu 以及版本号 latest

使用 Docker Build命令创建镜像

以 Windows 为例,首先 cmd 命令需要进入需要打包的文件夹路径内,如: “D:\MyProjects\Test” ,然后执行如下命令:

docker build -t test/ubuntu:v1 . 

参数含义

-t 参数等效于 –tag 参数,表示: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
“test/ubuntu:v1” 表示我设置的镜像名称以及版本号,最新版本通常使用“latest”表示,如: “test/ubuntu:latest” 即可。

生成的镜像在哪里

生成的镜像依然在 Docker 内,可以使用以下命令进行查看:

docker images

资料参考: https://www.runoob.com/docker/docker-build-command.html

Docker 停止容器->删除容器->删除镜像

应用场景:需要彻底删除一个正在运行的镜像

$ docker ps // 查看所有正在运行容器 
$ docker stop containerId // containerId 是容器的ID 
$ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID 
$ docker stop $(docker ps -a -q) //  stop停止所有容器 
$ docker rm $(docker ps -a -q) //   remove删除所有容器
$ docker images // 查看镜像列表
$ docker rmi ImageId  //删除镜像 ImageId 是镜像的Id

解决 Docker 容器时间与本地时间不一致的问题

Linux 通过 Date 命令查看系统时间,得到如下结果:

[root@iZ8vbg6m7f5ntzibw3t4huZ ~]# date
Mon Aug 26 12:24:58 CST 2019

但是在 Docker 容器中,同样输入 Date 命令,查看时间却得到如下结果:

root@52127e6f4c47:/app# date
Mon Aug 26 04:25:07 UTC 2019

可以发现,他们相隔了8小时。
CST应该是指(China Shanghai Time,东八区时间) 
UTC应该是指(Coordinated Universal Time,标准时间) 
所以,这2个时间实际上应该相差8个小时。


解决办法

1.进入容器:

docker exec -t -i c360cc412528 /bin/bash    // c360cc412528 为容器id

2. 在 /usr/share/zoneinfo 目录下找上海时区

cd  /usr/share/zoneinfo/Asia

3. 复制上海时区到 /etc 重命名 localtime 文件

cp -i Shanghai /etc/localtime

如得到提示 cp: overwrite ‘/etc/localtime’? ,则输入 yes 后按下回车键即可。

4. 完成,输入 Date 命令查看系统时间,得到如下结果:

root@52127e6f4c47:/usr/share/zoneinfo/Asia# date
Mon Aug 26 12:27:34 CST 2019

我们看到时间已经从 UTC 转为了 CST 时区,时间也已经显示正常,搞定。