centos-7下docker的基本常用命令使用学习笔记(B站千锋学习记录)
前提
进入root用户或者在下方所有命令前加上sudo,注意下面运行的容器要开放防火墙端口
防火墙常用命令
#查看已经开放的端口
firewall-cmd --list-ports
#开启端口,例如8080
firewall-cmd --zone=public --add-port=8080/tcp --permanent
#关闭端口,例如8080
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
#开启防火墙
systemctl start firewalld
#重启防火墙
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动
docker 安装
- 确保机器上没有老的docker版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine;
- 安装docker的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加docker的软件源(这里选择阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum,缓存,建立元数据
yum makecache fast
- 下载docker-ce
yum install -y docker-ce
- 启动docker
systemctl start docker
- 查看docker的版本
docker version
- 测试运行
docker run hello-world
- 重启docker
systemctl restart docker
docker 卸载
yum remove docker-ce
rm -rf /var/lib/docker
docker 镜像加速器的配置
- 进入/etc/docker目录,并创建daemon.json文件
cd /etc/docker/
mkdir daemon.json
- 往文件中添加镜像地址
#打开文件
vi daemon.json
#按i进入insert模式,粘入下方地址
{
"registry-mirrors":["https://gxeo3yz7.mirror.aliyuncs.com"]
}
#按esc保存退出
:wq
- 重启docker
systemctl daemon-reload
systemctl restart docker
- 检查是否生效
docker info
docker 镜像下载
- 尝试tomcat镜像下载
docker pull tomcat
- 查看下载的镜像
docker images
出现下图所示的镜像
- 指定版本
docker images tomcat:7
出现下方tomcat的7版本
docker 镜像查看
docker images
docker 镜像卸载
虚悬镜像的卸载
产生原因:新旧镜像重名,导致docker images查看时出现名为的镜像。
停止虚悬镜像的使用,然后输入命令
docker image prune
普通镜像的卸载
提前:要删除镜像必须确认此镜像⽬前没有被任何容器使⽤
#ID不用输全(一般前两位就行)
docker image rmi ID
docker image rm ID
例如下方,给出几种删除形式
#单个删除第一个
docker image rmi 71
docker image rm 71
#多个删除
docker image rmi 71 bd e6
docker 查看容器
#查看正在运行的容器
docker ps
#查看所有容器
docker ps -a
docker 启动容器
-i #保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的)
-t #为容器的标准输⼊虚拟⼀个tty
-d #后台运⾏容器
--rm #容器在启动后,执⾏完成命令或程序后就销毁
--name #给容器起⼀个⾃定义名称
-p #宿主机:内部端口
#例如创建运行一个在本地8080,内部8080端口运行的名为tomcat1的在后台运行,停止即删除的tomcat容器
docker run --rm -d --name tomcat1 -p 8080:8080 tomcat
#例如创建运行一个在本地8081,内部8080端口运行的名为tomcat2的在后台运行,停止不删除的tomcat容器
docker run -d --name tomcat2 -p 8081:8080 tomcat
docker 停止,删除,重启容器
#通过容器ID或者名称
#停止容器
docker stop ID
#重启容器
docker restart ID
#删除容器(所有容器删除前都要先停止)
docker rm ID
#停止所有容器
docker stop $(docker ps -a -q)
#删除所有容器
docker rm $(docker ps -a -q)
docker 日志查看
#containerName替换成相对应的容器名
docker logs containerName
#完整版查看从2018-12-1后的十条日志文件
#--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
#-f : 查看实时日志
#-t : 查看日志产生的日期
#-tail=10 : 查看最后的10条日志
docker logs -f -t --since="2018-12-1" --tail=10 containerName
docker 进入容器
#containerName替换成相对应的容器名
docker exec -it containerName bash
docker 在宿主机和容器之间交换⽂件
#例如将当前目录下的1.jpg图片复制到tomcat1容器中的/usr/local/tomcat/webapps/ROOT目录下,也可以反过来复制出来
docker cp 1.jpg tomcat1:/usr/local/tomcat/webapps/ROOT
docker 数据卷理解
作用:数据可持久化,让数据不在随着容器的消失而消失;独立于容器之外。
数据卷的特点:
1.数据卷可在容器之间共享或重用数据。
2.卷中的更改可以直接生效。
3.数据卷中的更改不会包含在镜像的更新中。
4.数据卷的生命周期一直持续到没有容器使用它为止。
docker 数据卷使用
#创建数据卷,默认会存放到目录: /var/lib/docker/volume/数据卷名称/_data目录下
docker volume create volumeName
#查看所有数据卷
docker volume ls
#查看数据卷
docker volume inspect volumeName
#删除数据卷
docker volume rm volumeName
#数据卷应用
#当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v volumeName:ContainerPath ID
#直接指定一个路径作为数据卷的存储位置
docker run -v volumePath:ContainerPath ID
#案例
#创建一个数据卷wlb
docker volume create wlb
#将项目案例放入指定路径并启动一个tomcat
docker run -d -p 8080:8080 --name tomcat-8080 -v volumeName:ContainerPath tomcat
docker run -d -p 8080:8080 --name tomcat-8080 -v volumePath:ContainerPath tomcat
docker 安装nignx
#取最新版的 Nginx 镜像,也可以指定版本
docker pull nginx:latest
#安装成功后查看
docker images
#容器运行
#name nginx-test:容器名称。
#-p 80:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
#-d nginx: 设置容器在在后台一直运行。
docker run -it --name nginx-test --rm -d -p 80:80 nginx
#进入容器
docker exec -it nginx-test bash
#由于容器内部不支持vi编辑工具,不方便对nginx.conf进行编写所以在外面新建文件进行映射
#在~下执行
mkdir -p /usr/local/nginx
cd /usr/local/nginx/
mkdir conf
mkdir html
mkdir logs
#进入conf进行映射
cd conf/
#拷贝nginx的两个配置文件
docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/nginx/conf
docker cp nginx-test:/etc/nginx/conf.d /usr/local/nginx/conf
#删除原先的nginx-test容器
docker stop nginx-test
docker rm nginx-test
#重新创建运行容器,做数据卷的创建
docker run -d -p 80:80 --name nginx-test -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/nginx/logs:/var/log/nginx nginx
#进入html目录创建index.html
cd /usr/local/nginx/html/
vi index.html
i <h1>sssss</h1> :wq
#ip查看发现出现了内容
nginx 集群配置
#在conf目录编辑nginx.conf
#在http内粘贴,例如我本地ip为192.168.1.148,配置三个端口
upstream nginxCluster{
server 192.168.1.148:8080;
server 192.168.1.148:8081;
server 192.168.1.148:8082;
}
#在conf.d内粘贴,文件中也有一个location /删除或修改/为/aa或其他
location /{
proxy_pass http://nginxCluster;
}
#重启docker中的nginx容器
docker restart nginx-test
docker 安装 mysql
执行下述操作用可用可视化工具例如navicat连接
#安装mysql5.*
#拉取mysql镜像
docker pull mysql:5.6
#创建运行容器
docker run -d --name mysql5.6-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root1' mysql:5.6
#进入容器
docker exec -it mysql5.6-3306 bash
#启动mysql,输入密码root
mysql -u root -p
#授权主机访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root1' WITH GRANT OPTION;
#刷新权限
FLUSH PRIVILEGES;
#退出
EXIT;
#安装mysql8.*
#拉取mysql镜像
docker pull mysql:8
#创建运行容器
docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root1 1mysql:8
#进入容器
docker exec -it mysql8 bash
#启动mysql,输入密码root
mysql -u root -p
#授权主机访问
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root1';
docker 安装Redis
#拉取镜像
docker pull redis:4.0.1
#创建并运行容器
docker run --rm -d --name redis6379 -p 6379:6379 redis:4.0.1 --requirepass "wlb"
#进入redis
docker exec -it redis6379 bash
#开启客户端
redis-cli
docekr 定制镜像部署springboot微服务
#常用命令解释
FROM #定基础镜像
MAINTAINER #提供dockerfile制作者本人信息
ENV #设置环境变量
USER #切换运行属主身份
WORKDIR #切换工作目录
VOLUME #数据卷
COPY #把宿主机中的文件复制到镜像中
EXPOSE #为容器打开指定要监听的端口以实现与外部通信
RUN #指令是用来执行命令行命令的
#宿主机创建空目录,用demo_0001.jar演示
mkdir -p /usr/local/docker/demo
#创建Dockerfile文件
vi Dockerfile
#粘贴下方内容
FROM java:8
VOLUME /tmp
ADD demo_0001.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
FROM:表示基础镜像,即运行环境
VOLUME /tmp创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使
用/tmp作为工作目录
ADD:拷贝文件并且重命名(ADD demo_0001.jar demo.jar 将应用jar包复制到/demo.jar)
EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员
告诉容器布署人员容器应该映射哪个端口给外界
ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动
时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
#构建容器
docker build -t demo .
#运行容器
docker run --rm -d --name containerName -p 8080:8080 demo
为Spring Boot使用的内嵌Tomcat容器默认使
用/tmp作为工作目录
ADD:拷贝文件并且重命名(ADD demo_0001.jar demo.jar 将应用jar包复制到/demo.jar)
EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员
告诉容器布署人员容器应该映射哪个端口给外界
ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动
时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
#构建容器
docker build -t demo .
#运行容器
docker run --rm -d --name containerName -p 8080:8080 demo
参考
B站学习直达:https://www.bilibili.com/video/BV1ug411j71W?p=1&vd_source=0fa8de2d2ffc73e699c5b8f3d6d71c5c
官方参考文档: https://docs.docker.com/