1.容器操作
操作 | 命令 | 说明 |
---|---|---|
运行 | docker run -itp --name 容器名 镜像名或者镜像id | –name指定容器名称,容器名可以自定义,如果不指定则自动命名;-i 以交互模式运行容器;-t 分配一个伪终端,即命令行,通常组合使用-it;-p用来指定端口映射,将Docker宿主机端口映射到容器内的端口;-d 表示后台运行,即守护进程方式运行容器;-v 指定挂载主机目录,默认为rw读写模式,ro表示只读。 |
列表 | docker ps -a -q | 查看正在运行中的容器以及暂停的容器,-a显示所有容器;-q表示只显示容器id |
启动 | docker start 容器名或者容器id | 启动容器 |
停止 | docker stop 容器名或者容器id | 停止正在运行的容器 |
删除 | docker rm 容器id或者容器名 | 删除容器。-f表示强制删除 |
日志 | docker logs 容器id或者容器名 | 获取容器的日志 |
在容器中执行操作 | docker exec -it 容器id或者容器名称 /bin/bash | 进入正在运行中的容器并且开启一个交互模式的终端,可以在容器中执行操作 |
拷贝文件 | docker cp 主机中的文件路径 容器名称或者容器id:容器中的目标路径 docker cp 容器名或者容器id:容器中源文件路径 宿主机目标路径 | 拷贝宿主机文件至容器中;拷贝容器中文件至宿主机中 |
获取元信息 | docker inspect 容器名或者容器id | 获取容器的元信息 |
容器改名 | docker rename old_name new-name | 容器修改名称 |
以centos为例:
备注:Docker容器内实际上运行着精简版的Linux系统,在系统之上运行相关软件
docker search centos
docker pull centos
#根据centos:latest镜像运行容器,并以交互模式进入容器中
docker run -it --name mycentos centos:latest
exit #退出容器,并且容器将进入停止状态
docker ps -a
docker start mycentos
docker stop mycentos
docker run mycentos
#强制删除所有容器
docker rm -f $(docker ps -qa)
以tomcat为例:
# 示例1:基本用法
docker search tomcat
docker pull tomcat
docker run --name mytomcat -p 8888:8080 -d tomcat
# 测试: http://宿主机ip:8888
docker stop mytomcat
docker ps -a
docker start mytomcat
#示例2:拷贝文件和挂载目录
docker run -p 8888:8080 -d tomcat
docker cp index.jsp c2de9bae4d53:/usr/local/tomcat/webapps/ROOT #将宿主机中的文件拷贝至容器中
#示例3:为docker容器安装软件
[root@shell_test run]# docker exec -it 767739c97d8a yum install bind
[root@shell_test run]# docker exec --help
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--help Print usage
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
# 部署web项目
docker cp spring-web.war 70cba924861c:/usr/local/tomcat/webapps
#以上命令执行后,以后项目更新代码后,还是需要再次将打包文件重新拷贝至容器中,相当麻烦,所以选在直接将本地目录或者文件直接挂载给容器这种方法(此方法被称为数据卷 -v 可挂载多个目录或者文件 :ro指定容器中对此文件只读 rw可读写)
docker run \
-p 8888:8080 \
-v /my/tomcat/webapps/spring-web.war:/usr/local/tomcat/webapps/spring-web.war \
-v /my/tomcat/data:/usr/local/tomcat/dataVolume:ro \
-d tomcat
#示例3:启动多个容器,一个镜像可以启动多个容器,互相独立、隔离
docker run -p 8081:8080 -d tomcat
docker run -p 8082:8080 -d tomcat
docker run -p 8083:8080 -d tomcat
2. 镜像操作
操作 | 命令 | 说明 |
---|---|---|
查找 | docker search 关键词 | 可以在docker hub网站上查看镜像的详细信息,如镜像的tag标签 |
抽取 | docker pull 镜像名:tag | :tag表示软件的版本,如果不指定则默认为latest |
列表 | docker images | 查看本地所有镜像 |
获取元信息 | docker inspect 镜像名或者镜像id | 获取镜像的元信息 、详细信息 |
删除 | docker rmi -f 镜像id或者镜像名 | 删除指定的本地镜像,-f表示强制删除 |
2.1 镜像的分层结构
- 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的编写的软件,包含某个软件所需要的所有内容。
- 基于UnionFS联合文件系统 ,采用分层结构,一层一层的堆叠起来,但从外面来看只能看到最外层的文件系统(镜像层)
- 分层结构的好处:共享资源、便于复用(许多镜像都是从相同的Base基础镜像构建而来,基础镜像只需要保存一份)
- 镜像都是只读的,而由镜像所生成的容器 是可修改的。
2.2 如何创建镜像
有时从docker hub镜像库中下载的镜像不能够满足我们的需求,此时就可以基于这个Base镜像封装一个我们自己的镜像
两种方法:
1. 更新镜像
2. 构建镜像
-
更新镜像
先使用基础镜像创建一个容器,然后对容器进行修改 ,最后使用commit命令提交为一个新的镜像
步骤1. 根据基础镜像创建一个容器
docker run --name mytomcat -p 8888:8080 -d tomcat
步骤2. 修改容器
docker exec -it bcd08edac78d /bin/bash cd webapps/ROOT rm -f index.jsp echo welcome to tomcat > index.html exit
步骤3. 提交为新镜像,语法:docker commit -m=“描述信息” -a=“作者” 容器id或者容器名 镜像名:tag
docker commit -m="修改tomcat配置文件" -a="sunwei" bcd08edac78d tomcat:v1
步骤4. 使用新镜像创建容器
docker run --name mytomcat_v1 -p 8888:8080 -d tomcat:v1
-
构建镜像
根据Dockerfile文件自动构建镜像
Dockerfile是一个包含创建镜像所有命令的文本文件,使用docker build 命令可以根据Dockerfile的内容创建镜像步骤1. 创建一个Dockerfile文件
#基础镜像 FROM tomcat #作者 MAINTAINER sunwei #执行命令 RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp RUN echo "welcome to tomcat!" > /usr/local/tomcat/webapps/ROOT/index.html
步骤2. 构建新镜像,语法:docker build -f dockerfile文件路径 -t 镜像名:tag 命令执行的上下文
docker build -f Dockerfile -t itany/tomcat:v2 .
步骤3. 使用新镜像运行容器
docker run -p 9999:8080 -d itany/tomcat:v2
大功告成!!!
鲁大师说过:愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者的话。