docker

docker

镜像操作

查看本地镜像

1
$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest c54a2cc56cbb 9 weeks ago 1.848 kB

在线查找镜像:

1
$ docker search tomcat

通常第一条为官方镜像,即Docker Hub中的镜像。官方镜像会在OFFICIAL一列显示[OK]字样,另外,STARS一列的星星数量显示了该镜像的受欢迎程度,星星越多,表明用的人越多,不过为安全起见,通常建议首选官方镜像或自制镜像,而不是第三方的。

拉取镜像

使用docker pull [镜像名称[:版本]]可以拉取一个镜像:

注: 完整的镜像名称由[repository]/name:[tag]构成,[repository]为仓库,如果省略,则默认为library,即从Docker Hub拉取;如果省略tag,则默认拉取latest版本,name为镜像名称,不能省略。

1
$ docker pull tomcat:7

一个好的实践是,拉取镜像时,总是指定一个明确的版本,这样能确保在接下来的使用中,明确知道使用的是哪个版本。因为latest版本总是指向最新的版本,这将造成不确定性。

删除镜像

删除一个镜像前,需要先停止使所有用它的容器,否则会报错,或者使用 -f选项强制删除。

1
$ docker rmi tomcat:7

导入导出镜像

导出镜像:

1
docker save 镜像 > /root/xx.tar.gz

导入镜像:

1
$ docker load < /root/xx.tar.gz

制作镜像

1
docker commit 容器名称或者容器ID 新镜像名称

容器操作

创建容器

以交互方式启动容器:

1
docker run -it --name 容器名称 镜像 /bin/bash

以守护进程方式启动容器:

1
docker run -d --name 容器名称 镜像

Example:

1
$ docker run -d --name tomcat001 -p 8081:8080 tomcat:7

其中,-d 指定容器在后台运行;–name用于指定容器的名称;-p 8888:8080 用于将容器内的8080端口映射到主机的8081端口,你也可以换成其他本机端口.如果需要,你可以创建多个容器使用,需要注意的是,本机映射的端口不能重复,name也不能重复。

查看当前容器

1
2
3
$ docker ps 查看正在运行的容器
$ docker ps -a 查看历史运行过的容器
$ docker ps -l 查看最近运行过的容器

查看容器日志

使用 docker logs 容器名称可以查看容器的日志输出,-f选项可以指定实时输出最新日志,类似于Linux 下的tail -f命令。

1
$ docker logs -f tomcat001

停止容器

1
$ docker stop tomcat001

启动容器

1
$ docker start tomcat001

删除容器

删除一个容器前,需要先停止容器,否则,需要使用 -f选项强制删除(不推荐)。

1
$ docker rm tomcat001

删除所有容器:

1
docker rm 'docker ps -a -q'

搭建Tomcat服务

1
docker run -d --name my-tomcat -p 8888:8080 镜像

说明:
8888端口是宿主机的端口
8080端口是容器内的端口
Alt text

部署web应用

  1. 将war包上传到宿主机器
  2. 通过docker cp命令将宿主机器的war包上传到容器中tomcat的webapps目录下。

    1
    docker cp /root/docker.war 容器名称或者容器ID:/usr/local/tomcat/webapps
  3. tomat会自动热部署,直接访问web应用的路径即可。

做成shell

创建dkcp.sh

1
2
#!/bin/bash
docker cp $1 $2:/usr/local/tomcat/webapps

.bash_profile中

1
alias dkcp="bash $HOME/shell/dkcp.sh" #$1 war包路径, $2 容器名 or 容器id


docker 后台运行和进入后台运行的容器

1
docker exec -it ContainerName /bin/bash

exec的 用exit也不会真正退出容器继续后台运行 用name或id都可以

1
docker exec -it ContainerName Command

是执行完命令就退出放在后台比如 ps -ef 显示内容然后就退出前台 如果要进入容器就用/bin/bash

前提是容器要正在运行 如果不是running就先 docker start containername