Docker常用指令
镜像操作
下载 CentOS 镜像
如果没有本地的镜像文件,则可以直接下载,下载的时候也是分层下载。
查看centos7镜像
| docker images |
| //可以看到name 以及id 后续操作可以通过name 或者id 进行 一般id 需要前三位及以上 |
或
该命令中image 没有带 s
运行 centos7
| docker run -it xxx(centos:7) bash |
- xxxx - 镜像名, 或 image id 的前几位
-it
这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
bash
放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。
删除镜像
501
代表镜像 id 前几位,一般三位以上,足够区分即可
镜像导出
| docker save mysql:5.7 node:8 | gzip > app.tar.gz |
镜像导入
如果已经上传了镜像文件,则可以无需下载 ,直接导入即可
注意 < 可以换成 -i
| docker load < apps.tar.gz |
容器操作
启动容器
| docker run -it centos:7 bash |
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
后台运行
-d
后台运行容器
- 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。
-d
在后台运行启动 bash,如果不加交互终端(-it),bash会立即退出,容器也会自动关闭
查看后台运行的容器输出结果
| docker ps # 查看正在运行的容器 |
| docker container logs 802 # 802 指的是当前运行的容器的id |
查看容器
| docker container ls -a |
| # 或 |
| docker ps -a |
-a
all, 全部 不管是否正在运行 都可以查看
终止容器
| docker container stop 802 |
重新启动容器
| docker container restart 802 |
进入容器
在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,可以使用 docker exec
命令
删除容器
| docker container rm -f 802 |
删除多个容器
| 用 空格隔开容器的名称 |
| docker rm xxx xxx xxx tomcat1 tomcat2 |
清理所有终止状态容器
数据管理
在容器中管理数据主要有两种方式:
- 数据卷(Volumes)
- 挂载主机目录 (Bind mounts)
数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录
- 数据卷 可以在容器之间共享和重用
- 对 数据卷 的修改会立马生效
- 对 数据卷 的更新,不会影响镜像
- 数据卷 默认会一直存在,即使容器被删除
创建数据卷
| docker volume create my-vol |
查看所有数据卷
查看指定 数据卷 的信息
| docker volume inspect my-vol |
查询的结果:
| [ |
| { |
| "Driver": "local", |
| "Labels": {}, |
| "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", |
| "Name": "my-vol", |
| "Options": {}, |
| "Scope": "local" |
| } |
| ] |
启动挂载数据卷的容器
| docker run -it --mount source=my-vol,target=/opt/app centos:7 bash |
| |
| # 或者: |
| |
| docker run -it -v my-vol:/opt/app centos:7 bash |
| 12345 |
-v my-vol:/opt/app
把数据卷 my-vol 挂载到容器的 /opt/app 目录
删除数据卷
挂载主机目录
| docker run -it --mount type=bind,source=/usr/app,target=/opt/app centos:7 bash |
| |
| # 或 |
| |
| docker run -it -v /usr/app:/opt/app centos:7 bash |
-v
如果本地目录不存在 Docker 会自动为你创建一个文件夹
--mount
参数时如果本地目录不存在,Docker 会报错
查看挂载目录信息
显示结果:
| ... |
| |
| "Mounts": [ |
| { |
| "Type": "bind", |
| "Source": "/usr/app", |
| "Destination": "/opt/app", |
| "Mode": "", |
| "RW": true, |
| "Propagation": "rprivate" |
| } |
| ], |
| |
| ... |
网络
自动分配映射端口
一般情况下先重启启动docker 容器
| systemctl restart docker |
| docker run -d -P tomcat |
| |
| # 查看容器信息 |
| docker container ls -a |
显示结果:
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| d03480b1a781 tomcat "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:32768->8080/tcp trusting_gagarin |
映射指定端口
| docker run -d -p 8090:8080 tomcat |
映射多个端口
| docker run -d \ |
| -p 5000:5000 \ |
| -p 80:8080 tomcat |
映射指定端口(指定网卡)
| docker run -d -p 192.168.64.150:8080:8080 tomcat |
自动分配映射端口(指定网卡)
| docker run -d -p 192.168.64.150::8080 tomcat |
查看端口配置
容器互联
新建网络
| docker network create -d bridge my-net |
-d
driver,网络类型,默认 bridge,也可以是 overlay(Swarm mode)
列出网络
查看网络信息
连接容器
| docker run -it --name app1 --network my-net centos:7 |
新开终端执行:
| docker run -it --name app2 --network my-net centos:7 |
在两个终端中分别执行:
显示如下:
| [root@35569c623c4c /]# ping app1 |
| PING app1 (172.18.0.2) 56(84) bytes of data. |
| 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms |
| 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms |
| 64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms |
| ...... |
| 123456 |
- 多个容器互联,推荐使用 Docker Compose
构建镜像--Dockerfile
准备
- centos:7镜像
- jdk压缩包
jdk-8u212-linux-x64.tar.gz
- tomcat7压缩包
apache-tomcat-7.0.96.tar.gz
Dockerfile文件
| |
| FROM centos:7 |
| |
| ADD jdk-8u212-linux-x64.tar.gz /opt/ |
| ADD apache-tomcat-7.0.96.tar.gz /usr/ |
| |
| RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat |
| |
| ENV JAVA_HOME=/opt/jdk1.8.0_212 \ |
| CATALINA_HOME=/usr/tomcat \ |
| PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin |
| |
| EXPOSE 8080 |
| |
| ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out |
准备文件夹
进入根目录
先准备文件夹,存放构建过程中使用的所有文件
Dockerfile, jdk....gz, tomcat....gz
编辑文件
| cat <<EOF > Dockerfile |
| FROM centos:7 |
| ADD jdk-8u212-linux-x64.tar.gz /opt/ |
| ADD apache-tomcat-7.0.96.tar.gz /usr/ |
| RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat |
| ENV JAVA_HOME=/opt/jdk1.8.0_212 \ |
| CATALINA_HOME=/usr/tomcat \ |
| PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin |
| EXPOSE 8080 |
| ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out |
| EOF |
上传JDK和tomcat压缩文件
| 上传jdk和tomcat7两个压缩文件到 tomcat7 目录 |
使用 Dockerfile 构建镜像
| docker build -t tomcat:7 . |
启动容器
准备存储目录
- webapps目录,例如
/opt/webapps
- logs目录,例如
/var/lib/tomcat-logs
| mkdir /opt/webapps |
| mkdir /opt/webapps/ROOT |
| mkdir /var/lib/tomcat-logs |
| |
| # 添加欢迎页 |
| cat <<EOF > /opt/webapps/ROOT/index.html |
| <h1>Hello Docker!!!</h1> |
| EOF |
启动容器,挂载目录
| docker run \ |
| -d \ |
| -p 80:8080 \ |
| --name tomcat7 \ |
| -v /opt/webapps:/usr/tomcat/webapps \ |
| -v /var/lib/tomcat-logs:/usr/tomcat/logs \ |
| tomcat:7 |
浏览器访问
http://192.168.64.150
效果:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步