Docker使用
安装
菜鸟教程
https://www.runoob.com/docker/docker-command-manual.html
一键安装
curl -sSL https://get.daocloud.io/docker | sh
镜像加速 通过自己的阿里云账号直接加速 参考 菜鸟教程 不做介绍
指令
镜像指令
//搜索
docker search tomcat
//拉取 可以加tag
docker pull tomcat
//查询本地镜像
docker images
//删除镜像
[root@iZbp1hmyyp75h0xc481p40Z ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Deleted: sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
Deleted: sha256:4dfe71c4470c5920135f00af483556b09911b72547113512d36dc29bfc5f7445
Deleted: sha256:3c90a0917c79b758d74b7040f62d17a7680cd14077f734330b1994a2985283b8
Deleted: sha256:a1c538085c6f891424160d8db120ea093d4dda393e94cd4713e3fff3c82299b5
Deleted: sha256:a3ee2510dcf02c980d7aff635909612006fd1662084d6225e52e769b984abeb5
如果镜像的容器在运行的时候 不能使用rmi删除 但是可以使用 rmi -f 强制删除 会把对应的容器停掉再删除
删除所有镜像 恢复环境
docker rmi $(docker images -q)
容器指令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
mysql启动 -d 后台 -p端口映射
docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
使用exit 退出
再进去使用
docker exec -it {id}
在容器 mynginx 中开启一个交互模式的终端:
在docker 里面新开了一个bash 进程,在该终端可以通过命令和容器交互,类似于通过ssh和远程linux server 交互。
所以大多数情况,可以直接使用 docker exec 命令。
docker exec -i -t mynginx /bin/bash
sudo docker exec -i -t loving_heisenberg /bin/bash
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。 -d是守护式 就是后台运行 这个是最常用的
docker run --name mynginx -d nginx:latest
显示正在运行的容器 容器使用id去弄 不然tag容易出错
docker ps
所有
docker ps -a
暂时最近的2个
docker ps -n 2
进入容器
docker attach 容器id
重启容器
docker restart 容器id
停止容器 正常关
docker stop 容器id
强杀进程 可能出现意外 不建议使用
docker kill 容器id
物理删除容器
docker rm 容器id
docker rm -f 容器id 删除带运行的 以后都用带f的就行了
docker cp :用于容器与主机之间的数据拷贝。
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker cp /www/runoob 96f7f14e99ab:/www/
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
docker cp 96f7f14e99ab:/www /tmp/
端口映射
-p
Docker Commit
**docker commit 😗*从容器创建一个新的镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
推送镜像到服务器 hub 或者阿里云服务器
需要注册账号
docker push
目录挂载
不使用目录挂载就需要使用 docker cp 进行复制 使用不是很方便
有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了
譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:
# docker run -it -v /test:/soft centos /bin/bash
这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
通常有多个目录挂载
Springboot项目运行
使用简单的主从mysql
docker file 必须掌握
https://www.cnblogs.com/panwenbin-logs/p/8007348.html
下面给出mycat的文件
FROM centos
MAINTAINER caomingxing
LABEL name="cmx myCat Image" \
build-date="20210119"
ADD jdk-8u251-linux-x64.tar.gz /home/
ADD Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz /home/
ENV WORKPATH /home/mycat/
WORKDIR $WORKPATH
ENV JAVA_HOME /home/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8066
CMD /home/mycat/bin/mycat console
docker build -f mycatdockerfile -t mycat:1.0 .
docker run -p 3341:8066 -it accb423d38ae
我们先把conf配置和logs日志目录copy到宿主机,主要是我们启动的时候挂载宿主机,方便配置和查看日志;
docker cp 3a8a153a3312:/home/mycat/conf /home/docker/mycat/
docker cp 3a8a153a3312:/home/mycat/logs /home/docker/mycat/
docker run -p 3341:8066 -it -v /home/docker/mycat/conf/:/home/mycat/conf/ -v /home/docker/mycat/logs/:/home/mycat/logs/ 镜像id
docker run -p 3341:8066 -it -v /home/docker/mycat/conf/:/home/mycat/conf/ -v /home/docker/mycat/logs/:/home/mycat/logs/ b9ad9d026f9c