一、简介
Docker架构:
二、Docker 安装及常用命令
2.1 安装Docker
# 移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
#启动
systemctl enable docker --now
# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.2 下载镜像 docker pull
以下命令以Nginx为例:
#下载docker镜像
docker pull nginx
2.3 创建容器 docekr run
# 创建并运行容器 指定名称 后台运行 开机自启 映射端口 镜像ID
docker run --name=mynginx -d --restart=always -p 88:80 87a94228f133
公网访问88的端口,映射到Docker容器的80端口:
2.4 进入容器 docker exec
# 进入容器
docker exec -it b181173db9ad /bin/bash
# 进入Nginx 首页位置的 目录
cd /usr/share/nginx/html/
# 追加文本信息到nginx欢迎页中
echo "Hello Docker Nginx!" >> index.html
# 退出容器
exit
2.5 提交镜像 docker commit
# 提交容器 将我们配置好的容器提交成为一个新的镜像 -m提交信息 -a作者 容器ID 新的镜像名:版本
docker commit -m "修改首页" -a "LiuShihao" b181173db9ad liushihaonginx:v1.0
2.6 镜像传输
第一种方式 保存镜像 docker save
将镜像保存为一个实体的压缩包
#使用docker save 命令 -o 文件名.tar
docker save -o abc.tar 39f3969143bc
然后使用scp命令将文件传输到其他服务器:
# 将本机的abc.tar压缩包 传输到 另一台服务器的root目录下
scp abc.tar root@192.168.186.143:/root
第二种方式 推送镜像到远程仓库 docker push
将镜像推送到镜像仓库,比如hub docker 等,我以阿里云的镜像仓库为例:
# 推送镜像到仓库之前需要登录 用户名是阿里云账号全称
docker login --username=liu*****t registry.cn-hangzhou.aliyuncs.com
# 给镜像打上标签 镜像ID 仓库全路径:标签
docker tag 39f3969143bc registry.cn-hangzhou.aliyuncs.com/liushihao_docker_repository/nginx_images:v1.0
# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/liushihao_docker_repository/nginx_images:v1.0
2.7 挂载容器内部文件到外部文件 docker run -v
# -v 宿主机目录:容器内部目录:ro ro只读 rw 读写 87a94228f133:镜像ID
docker run --name=mynginx -d -p 88:80 -v /data/html:/usr/share/nginx/html:ro 87a94228f133
宿主机会自动创建目录 :/date/html
在改目录下创建 index.html
文件
(注意:如果宿主机的目录下为空,把那么容器内的/usr/share/nginx/html目录也是空)
echo "<html><body><h1>Hello Welcome To Nginx World</h1></body></html>" > index.html
之后想要修改Nginx首页只需要修改主机/data/html/index.html的文件就可以对容器生效。
浏览器访问,此时Nginx容器的欢迎页内容显示的就是我们宿主机/data/html
目录下的index.html
页面:
2.8 其他命令
查看日志 docker logs
#查看容器运行日志 容器ID
docker logs 11c70c931a5e
复制文件 docker cp
# docker cp 容器ID:目录 主机目录 将正在运行的容器内的文件 复制到宿主机的目录下 也可以反过来
docker cp 11c70c931a5e:/etc/nginx/nginx.conf /data/conf/nginx.conf
三、将应用打包成镜像
创建应用
首先创建一个SpringBoot应用,打jar包:
编写 Dockerfile
编写Dockerfile
文件
# JDK环境
FROM openjdk:8-oraclelinux8
# 作者
LABEL maintainer=LiuShihao
#将jar包 复制到容器内的位置
COPY target/*.jar /app.jar
# 执行启动命令
ENTRYPOINT ["java","-jar","app.jar"]
创建镜像 docker build
使用docker build 命令打包成镜像
# -t 打标签 -f 指定Dockerfile 如果名称是Dockerfile可省略 .代表当前目录
docker build -t 标签 -f Dockerfile文件名 .
docker build -t crm2.0-open:v1.0 .
然后使用docker images 命令查看我们刚刚通过Dockerfile文件创建的镜像
创建并启动容器 docker run
# -d 后台启动 -p 端口映射
docker run -d -p 8080:8080 镜像ID
docker run -d -p 8080:8080 990ac9e049fb
在浏览器访问成功:
启动后要使用docker ps
命令查看正在运行的容器,有没有启动起来
如果没有启动起来可以使用docker logs
命令查看容器的运行日志。
如果容器运行失败的原因是:no main manifest attribute, in app.jar
。
解决方法:
在SpringBoot应用的pom文件加上:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- // 指定版本和goals-->
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>