docker使用
运行交互式的容器
$ docker run -it ubuntu /bin/bash
各个参数解析:
-
-t: 在新容器内指定一个伪终端或终端。
-
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
需要确认容器有在运行,可以通过 docker ps 来查看:

在容器内使用 docker logs 命令,查看容器内的标准输出:

下面的命令来停止:
$ docker stop <容器id>
#停止的容器可以通过 docker restart 重启:
$ docker restart <容器 ID>
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
exec 命令
下面演示了使用 docker exec 命令。
docker exec -it 243c32535da7 /bin/bash
注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。
更多参数说明请使用 docker exec –help 命令查看。
但是docker run,从这个容器中退出,会导致容器的停止
导出容器
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export 1e560fca3906 > ubuntu.tar
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
删除容器
删除容器使用 docker rm 命令:
$ docker rm -f 1e560fca3906
我们也可以通过 -p 参数来设置不一样的端口:
runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar。
我可以使用 docker port bf08b7f2cd89 或 docker port wizardly_chandrasekhar 来查看容器端口的映射情况。
查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程

列出镜像列表(常用)
使用 docker images 来列出本地主机上的镜像。

获取一个新的镜像
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

删除镜像
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
-
1、从已经创建的容器中更新镜像,并且提交这个镜像
-
2、使用 Dockerfile 指令来创建一个新的镜像
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。

在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

设置镜像标签
我们可以使用 docker tag 命令,为镜像添加一个新的标签。

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。
网络端口映射
我们也可以使用 -p 标识来指定容器端口绑定到主机端口。
两种方式的区别是:
- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口。

另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

查看容器ip地址
docker inspect <容器名>
查看容器网络
使用docker-compose up启动容器后,这些容器都会被加入app_default网络中。使用docker network ls可以查看网络列表,docker network inspect 可以查看对应网络的配置。
容器网络的基本
创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头。
我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器的ip地址。
假设某个容器(假设容器的名称为myweb)被分配的地址是 172.17.0.2,该容器上启动了一个web服务,其端口号是80(注意这是容器中的端口号)。
这时我们用docker port命令可以查看该web服务在容器的端口对应到主机端口的信息,如:
docker port myweb
输出
80/tcp -> 0.0.0.0:32776
总结下,如果某个容器提供了对外的服务(如web服务),则统一的访问方式可以利用docker主机的ip地址和容器映射到主机上的端口来统一访问。
dockerfile示例:
1 FROM centos:centos6
2 MAINTAINER David "xx@xx.com"
3 RUN yum install -y mysql-server mysql
4 RUN /etc/init.d/mysqld start
5 RUN mysql -e "grant all privileges on *.* to 'root'@'%' identified by '1234';"
6 RUN mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '1234';"
7 EXPOSE 3306
8 CMD ["/usr/bin/mysqld"]
树莓派中使用的java镜像
docker pull armhfbuild/java
将容器保存为镜像
docker commit [选项] [容器ID或容器名] [仓库名:标签]
例子:
# docker commit -a ‘weikaixxxxxx’ -m ‘导入了数据库’ 9adeb5943045 mysql:v2
docker commit e400eca4994d centos1
进入容器
docker exec -it 243c32535da7 /bin/bash
Docker容器向宿主机传送文件
格式:
docker cp container_id:<docker容器内的路径> <本地保存文件的路径>
比如:
docker cp 10704c9eb7bb:/root/test.text /home/vagrant/test.txt
宿主机向Docker容器传送文件
格式:
docker cp 本地文件的路径 container_id:<docker容器内的路径>
比如:
docker cp /home/vagrant/test.txt 10704c9eb7bb:/root/test.text
使用Dockerfile文件构建镜像:
docker build -t xxxx:xxxx .