docker基础入门,常见命令的相关操作,并实战将java服务构建为docker镜像

172 阅读1分钟

docker相关操作

docker安装
// 进入服务器,先删除跟docker相关的东西
yum remove docker*
​
// 配置yum源
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo// 安装docker
yum install -y docker-ce docker-ce-cli containerd.io
​
// 启动 设置默认开启并启动
systemctl enable docker --now
​
// 配置加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3sf8z1r8.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
​
​
docker镜像操作
// 下载docker镜像,可以去docker-hub官网下载,在首页进行搜索,下载相应镜像
https://hub.docker.com/// 查看目前有的镜像
docker images
​
// 下载最新镜像 
docker pull nginx
docker pull nginx:latest //两个命令等价
// 拉取指定版本的镜像
docker pull 镜像名:版本号
​
// 删除镜像
docker rmi 镜像名:版本号
docker rmi 镜像id
​
​
启动容器
// 基础启动
docker run 镜像名
docker run nginx
​
// 加相关参数启动
// -d 后台启动,不占用当前窗口
// --name 为当前容器起一个名字,不然会随机指定一个名字,可以通过容器名称停止容器
// --restart 可以为当前容器设置为自启动
// -p 将本地的端口号映射到docker容器的端口号
docker run -d --name=mynginx --restart=always -p 80:80 nginx
​
// 停止容器
docker stop 容器名或容器id
​
// 再次启动容器
docker start 容器名/容器id
​
// 删除容器
docker rm 容器名或id
docker rm -f 容器名或容器id // 强制删除,可以删除正在运行中的容器// 更新docker容器的相关配置
docker update 容器id/容器名 --restart=always
​
进入容器
docker exec -it 容器id /bin/bash
// 或者
docker exec -it 容器id /bin/sh
​
// 退出容器
exit
容器提交
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
// -a 作者信息
// -m 提交信息
docker commit -a "cc" -m '修改html' 容器id  新镜像名称:版本号
docker commit -a 'cc' -m '修改html' 3555e2b66ae0 ccnginx:1.0
容器打包与加载
//-o output 写入到文件 
docker save -o aaa.tar ccnginx:1.0// 将压缩包加载为镜像
// -i input 
docker load -i aaa.tar
容器推送与拉取
// 先将镜像按仓库要求改名
docker tag ccnginx:1.0 chenqq630/ccnginx:1.0// 登录到docker hub
docker login
​
// 推送镜像
docker push chenqq630/ccnginx:1.0// 拉取镜像
docker pull chenqq630/ccnginx:1.0// 退出docker hub
docker logout
其他命令
// 查看容器日志
docker logs 容器名或容器id
​
// -v 将容器内的文件挂载到容器外,可以挂载文件或者文件夹
docker run -v /data/html:/user/share/nginx/html nginx
docker run -v /data/conf/nginx.conf:/user/share/nginx/conf/nginx.html nginx
​
// 将容器内的文件复制到容器外
docker cp 344ebd98cb19:/ect/a.txt /data/b.txt// 将容器外的文件复制到容器内
docker cp /data/b.txt 344ebd98cb19:/ect/a.txt
实战演练

将java应用构建为docker镜像并运行

// 项目中使用了redis,先把redis容器运行起来
docker run -v /cc/data/redis/redis.conf:/etc/redis/redis.conf \
-v /cc/data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf
​
// 编写java应用并打包,这里有个小坑,需要添加一个maven插件
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
​
// 编写Dockerfile文件
FROM openjdk:8-jdk-slim
LABEL maintainer=cc
​
COPY target/*.jar   /app.jar
​
ENTRYPOINT ["java","-jar","/app.jar"]
​
// 打包上传并构建镜像(注意末尾的 .)
docker build -t java-demo:1.0 .
​
//运行容器
docker run -d -p 8080:8080 --name myjava-app java-demo:1.0 

\