linux 安装docker 及 基础使用

1.查看是否安装docker

[root@localhost ~]# yum list installed | grep docker

在这里插入图片描述


2.用yum源安装

[root@localhost ~]# yum -y install docker

在这里插入图片描述


3.启动Docker

[root@localhost ~]# systemctl start docker

4.查看docker服务状态

[root@localhost ~]# systemctl status docker

在这里插入图片描述


5. 设置开机启动
[root@localhost ~]# systemctl enable docker.service

在这里插入图片描述

6 常用指令


修改 docker 镜像地址:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io

配置镜像加速
vim /etc/docker/daemon.json

{
    
    
        "registry-mirrors":["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]

}

// 重新生效
sudo systemctl daemon-reload  或者 sudo systemctl restart docker

Docker 拉取镜像:
		docker pull ubuntu:16.04
运行:  docker run -it --rm ubuntu:16.04 /bin/bash
-it 容器交互界面,--rm 容器退出删除容器
查看容器:docker container ls --all
容器信息:docker system df
启动容器:docker start imagesId
查询日志:docker logs imagesId 
后台运行 -d (Docker run -d images:tag)
it 命令窗口运行,id 后台运行
端口映射:-p (宿主机:容器端口)
容器名字: --name 名字
表示运行容器: -i
容器启动后进去命令行: -t
创建守护式容器后台运行: -d
目录双向绑定: -v 宿主机目录:容器目录 权限不足使用: --privileged=true
多目录: -v 宿主机目录:容器目录 -v 宿主机目录:容器目录
匿名挂载:-v 容器目录 容器外对应目录会在:/var/lib/docker/volumes 中生成

默认数据卷: /var/lib/docker/volumes

docker inspect 容器名 查看容器详细信息 文件信息mounts:[]

运行容器:docker run --name nginx -d -p 80:80 nginx
进入容器:docker exec -it (imagesId/name) 
docker run --privileged=true -p 6379:6379  --name redis -v /soft/redis/redis.conf:/soft/redis/redis.conf -v /soft/redis/data:/data -d redis:latest redis-server /soft/redis/redis.conf --appendonly yes
e093c803daa38a31dfc7ca251bafb3678bc2a23d2e3101552d5e51a7e5a3bd57
-v 文件路径映射

rancher:
	docker run -d --restart=unless-stopped  -p 80:80 -p 443:443 \
-v /water/runfile/docker_volume/rancher_home/rancher:/var/lib/rancher \
-v /water/runfile/docker_volume/rancher_home/auditlog:/var/log/auditlog \
--name rancher -e java_opts="-Xmx1024m" rancher/rancher:v2.0.0

创建自己的镜像

docker 创建自己的镜像
docker commit 创建新的镜像
docker commit -a="xiaomig" -m="jdk mvn tomcat"  mycentos centos7:7
-a 作者 -M 提交信息  mycentos 容器名 centos7 镜像名:7 标签
docker build 配合dockerfile 使用
  1. 文件拷贝
docker cp 宿主机文件 镜像:文件路径
docker cp /soft/tomcat/app.tar centos:/usr/local/

Dockerfile 常用指令

中文文档:https://www.docker.org.cn/dockerppt/114.html

1. FROM
	语法 FROM <image>:<tag>
	构建新镜像来源于那个基础镜像,如果没有选择tag 默认为latest
	如果不以任何镜像为基础,写法 FROM scratch (scratch 镜像为一个空镜像)
	
2. RUN 有两种使用方式
	RUN
	RUN  "executable", "param1", "param2"
	每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建 。
	exec 方式会被解析为一个 JSON 数组,所以必须使用双引号而不是单引号。exec 方式不会调用一个命令 shell,所以也就不会继承相应的变量,
	RUN [ "echo", "$HOME" ]
	这种方式是不会达到输出 HOME 变量的,正确的方式应该是这样的
	
	RUN [ "sh", "-c", "echo", "$HOME" ]
	RUN产生的缓存在下一次构建的时候是不会失效的,会被重用,可以使用--no-cache选项,即docker build --no-cache,如此便不会缓存。

第一个自制镜像

创建目录:

# 创建目录
mkdir -p /soft/docker/dockerfile
# 创建DockerFile 文件
vi Dockerfile
# 指定基础镜像
FROM centos:7
# 通过镜像标签声明作者信息
LABEL maintainer="小马哥"
# 设置工作目录
WORKDIR  /usr/local
# 新镜像构建成功后 创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
# 拷贝文件并解压
ADD jdk-8u191-linux-x64.tar.gz /usr/local/jdk
ADD apache-tomcat-9.0.37.tar.gz /usr/local/tomcat
# 暴露容器运行是的 8080 接口给外部
EXPOSE 8080
# 设置环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_191
ENV PATH $PATH:$JAVA_HOME/bin
# 启动容器时 启动tomcat
CMD ["/usr/local/tomcat/apache-tomcat-9.0.37/bin/catalina.sh","run"]

构建镜像
在这里插入图片描述

# -f 文件路径 ,镜像名字:tag 镜像存放路径(. 默认当前文件路径)
docker build -f /soft/docker/dockerfile/Dockerfile -t mycentosbuild:7 /soft/docker/dockerfile

#运行
docker run -di --name mycentosbuild7 -p 89:8080 mycentosbuild:7

镜像保存

# 镜像保存
docker save -o /soft/docker/mycentosbuild.tar mycentosbuild:7

镜像恢复

docker load -i /soft/docker/mycentosbuild.tar

Docker 注册中心使用

docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname

#通过docker login 登陆
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: wang0524
Password: 
Login Succeeded
# 打标签 仓库名/镜像:标签
[root@root /]#  docker tag hello-world:latest wang0524/myhello:1.0.0  
# 推送
docker push wang0524/myhello:1.0.0

# 退出登陆
docker logout

Docker 私有仓库搭建

  1. 拉取 docker register
    在这里插入图片描述
# 1. 拉取
docker pull registry
# 2. 修改配置 添加私有仓库地址 保存退出
vi /etc/docker/daemon.json
{
    
    
        "registry-mirrors":["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
        "insecure-registries": ["192.168.220.10:5000"]

}
# 3. 加载配置,重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 创建私有仓库容器
docker run -di --name registry -p 5000:5000 -v /soft/docker/:/var/lib/registry registry

访问:http://192.168.220.10:5000/v2/_catalog 说明私有仓库搭建成功
在这里插入图片描述

  • 推送镜像到私有仓库
# 1. 先给镜像设置标签: docker tag local-image:tag new-repo:tagname
[root@root docker]# docker tag hello-world:latest 192.168.220.10:5000/helloworldtest:1.0.0
# 2. 推送 至私有仓库 docker push new-repo:tagname
[root@root docker]# docker push 192.168.220.10:5000/helloworldtest:1.0.0 

在这里插入图片描述

私有仓库认证功能实现

  1. 生成证书
# 1. 创建证书存储目录
mkdir -p /soft/docker/certs
# 生成自签名证书命令
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /soft/docker/certs/domain.key -x509 -days 365 -out /soft/docker/certs/domian.crt

解释:

  • openssl req : 创建证书签名请求等功能
  • -newkey : 创建CSR证书签名和RSA 私钥文件
  • rsa:2048 : 指定创建的RSA 私钥长度为2048
  • -nodes : 对私钥不进行加密
  • -sha256 : 使用SHA256 算法
  • -keyout : 创建的私钥文件名称及位置
  • -x509 : 自签发证书格式
  • -days : 证书有效期
  • -out : 指定CSR 输出文件名称及位置

红色为仓库主机ip
在这里插入图片描述
2. 生成鉴权密码文件

# 1. 创建存储鉴权密码文件目录
mkdir -p /soft/docker/auth
# 2. 没有 htpasswd 安装httpd
yum install -y httpd

# 3. 生成 用户名root 密码root
htpasswd -Bbn root root > /soft/docker/auth/htpasswd
[root@root auth]# ls 生成OK
htpasswd
  1. 配置仓库上传,先删除容器,重新导证书
docker run -di --name registry -p 5000:5000 \
-v /soft/docker:/var/lib/registry \
-v /soft/docker/certs/:/certs \
-v /soft/docker/auth/:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domian.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry

已经无法查看
在这里插入图片描述
推送报错, 需要登陆认证
在这里插入图片描述
登陆:推送成功
在这里插入图片描述

Docker 容器通信

  1. 网络模式 docker network ls
 # 1. 指令 docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a21347ef307b   bridge    bridge    local
73a34abea56f   host      host      local
f04917c94a00   none      null      local

在这里插入图片描述
在这里插入图片描述
2. docker run -it --name bbox busybox busybox 小工具

  1. 创建网络 docker network create
  • Docker 自定义网络模式使用简单方便, 但是每次容器重启ip 发生变化, 自定义网络模式,实现和注册中心类似的逻辑,通过容器名称进行绑定,保证容器中应用的安全性,启用容器名称到IP 地址的 自动DNS 解析。
  • 从Docker 1.10 docker daemon 实现内嵌的 DNS server 使容器之间 可以通过容器名称进行通信, 方法是创建容器时使用 --name 为容器命名。但是 使用Docker DNS 有限制, 只能在自定义 网络中使用,默认的 bridge 网络无法使用 DNS
# 1. 创建网络 docker network create my_network
docker network create my_network
# 2. 查看 docker network ls

# 3. 使用自定义网络 创建两个容器 
docker run -it --name bbox1 --net my_network busybox
docker run -it --name bbox2 --net my_network busybox
# 4. 查看容器信息 docker inspect bbox1
ping bbox1 或者 ping ip 都可以ping通

在这里插入图片描述

Docker 安装Mysql

-e MYSQL_ROOT_PASSWORD 设置mysql 密码

# 拉取镜像
docker pull mysql
# 启动容器
docker run -di --name mysql-01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

DockerMaven 插件

maven 插件自动部署

  • 修改宿主机的docker 配置 让其可以远程访问
vi /lib/systemmd/system/docker.service

猜你喜欢

转载自blog.csdn.net/qq_16183731/article/details/107650120