docker

1、Docker简介

Docker如何解决不同系统环境的问题?

  • 1、Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像,Docker应用运行在容器中,使用沙箱机制,相互隔离
  • 2、Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker与虚拟机差异

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

Docker架构

  • 镜像(Image): Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像
  • 容器(Container): 镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见
  • Docker结构
    • Docker是一个CS架构的程序,由两部分组成
      • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等
      • 客户端(client): 通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令
  • DockerHub: DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Registry

2、Docker安装

  • 1、如果已安装,可卸载
yum remove docker \
       docker-client \
       docker-client-latest \
       docker-common \
       docker-latest \
       docker-latest-logrotate \
       docker-logrotate \
       docker-selinux \
       docker-engine-selinux \
       docker-engine \
       docker-ce
  • 2、安装yum工具
yum install -y yum-utils \
          device-mapper-persistent-data \
          lvm2 --skip-broken
  • 3、更新本地镜像
yum-config-manager \
   	--add-repo \
   	https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast
  • 4、安装docker
yum install -y docker-ce 
	# docker-ce为社区免费版本
  • 5、启动docker
# 关闭防火墙
systemctl stop firewalld # 关闭
systemctl disable firewalld # 禁止开机启动防火墙

# 启动docker
systemctl start docker  # 启动docker服务
systemctl stop docker  # 停止docker服务
systemctl restart docker  # 重启docker服务
  • 6、检查docker安装是否成功
docker -v
  • 7、配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3cllwqwa.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 文档地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

3、Docker基本操作

  • 镜像相关命令
    • 镜像名称一般分两部分组成: [repository]:[tag]
    • 在没有指定tag时,默认是latest,代表最新版本的镜像
  • 镜像仓库地址: https://hub.docker.com/

3.1、镜像操作命令

docker build	构建镜像
docker push		推送镜像到服务
docker pull		从服务拉取镜像
	docker pull mysql:5.7.25
docker images	查看镜像
docker rmi		删除镜像
	docker rmi nginx:latest
docker save		保存镜像为压缩包
	docker save -o nginx.tar nginx:latest
docker load		加载压缩包为镜像
	docker load -i nginx.tar

3.2、容器操作命令

docker run		运行容器
	docker run --name containerName -p 80:80 -d nginx
		docker run		创建并运行一个容器
		--name			容器名称,比如mn
		-p				将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
		-d				后台运行容器
		nginx			镜像名称
docker pause	容器暂停
docker unpause	容器恢复
docker stop		容器停止
docker start	容器启动
docker ps		查看所有运行的容器及状态
docker logs		查看容器运行日志
	docker logs -f mysql
		-f		持续查看日志
        mysql   镜像名称
docker exec		进入容器执行命令
	docker exec -it mn bash
		docker exec:	进入容器内容
		-it				给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
		mn				要进入的容器的名称
		bash			进入容器后执行的命令,bash是linux终端交互命令
	cd /user/share/nginx/html	进入nginx的html目录
	修改呢index.html内容
        sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html		
        sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
docker rm		删除指定容器

3.3、数据卷

  • 数据卷(volume): 是一个虚拟目录,指向宿主机文件系统中某个目录
  • 作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

1、操作数据卷

docker volume [command]      
  • docker volume 数据卷操作,根据命令后跟随的command来确定下一步的操作
  • command
    • create 创建一个volume
    • inspect 显示一个或多个volume的信息
    • ls 列出所有的volume
    • prune 删除未使用的volume
    • rm 删除一个或多个指定的volume

2、挂载数据卷 - 创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx
  • docker run 创建并运行容器
  • –name mn 给容器起名称叫mn
  • -v html:/usr/share/nginx/html 把html数据卷挂载到容器内的/usr/share/nginx/html
  • -p 80:80 把宿主机的80端口映射到容器内的80端口
  • -d nginx 后台运行nginx镜像

3、进入html数据卷位置,修改html内容

docker volume inspect html
cd /var/lib/docker/volumes/html/_data
vi index.html

创建运行MySQL容器,将宿主机目录直接挂载到容器

mkdir /tmp/mysql/conf
mkdir /tmp/mysql/data
docker run \
    --name mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -p 3306:3306 \
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
    -v /tmp/mysql/data:/var/lib/mysql \
    -d \
    mysql:5.7.25

4、Dockerfile自定义镜像

4.1、镜像结构

  • 镜像是分层结构,每一层称为一个Layer
    • BaseImage层: 包含基本的系统函数库、环境变量、文件系统
    • Entrypoint: 入口,是镜像中应用启动的命令
    • 其他: 在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

4.2、Dockerfile

  • Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像,每个指令都会形成一层Layer

4.3、构建一个项目

基于Ubuntu镜像构建新镜像

  • 1、创建一个空文件夹docker-demo
  • 2、拷贝docker-demo.jar到docker-demo目录下
  • 3、拷贝jdk8.tar.gz到docker-demo目录下
  • 4、在目录中创建Dockerfile文件
 # 指定基础镜像
 FROM ubuntu:16.04
 # 配置环境变量,JDK的安装目录
 ENV JAVA_DIR=/usr/local

 # 拷贝jdk和java项目的包
 COPY ./jdk8.tar.gz $JAVA_DIR/
 COPY ./docker-demo.jar /tmp/app.jar

 # 安装JDK
 RUN cd $JAVA_DIR \
  && tar -xf ./jdk8.tar.gz \
  && mv ./jdk1.8.0_144 ./java8

 # 配置环境变量
 ENV JAVA_HOME=$JAVA_DIR/java8
 ENV PATH=$PATH:$JAVA_HOME/bin

 # 暴露端口
 EXPOSE 8090
 # 入口,java项目的启动命令
 ENTRYPOINT java -jar /tmp/app.jar
  • 5、进入docker-demo目录
  • 6、执行命令
docker build -t javaweb:1.0
  • 7、运行
docker run --name docker-demo -p 8090:8090 -d javaweb:1.0

基于java:8-alpine镜像,构建新镜像

1、创建一个空文件夹docker-demo
2、拷贝docker-demo.jar到docker-demo目录下
3、在目录中创建Dockerfile文件
    # 指定基础镜像
    FROM java:8-alpine

    # 拷贝java项目的包
    COPY ./docker-demo.jar /tmp/app.jar

    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
4、进入docker-demo目录
5、执行命令
    docker build -t javaweb:1.0 .
6、运行
    docker run --name docker-demo -p 8090:8090 -d javaweb:1.0

5、DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个一个创建和运行容器
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行
version: "3.2"
​
services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

5.1、安装DockerCompose

1、下载
    curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、修改文件权限
    chmod +x /usr/local/bin/docker-compose
3、Base自动补全命令
    curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    注意: 如果报错,需要修改自己的hosts文件
        echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

6、部署微服务集群

  • 1、修改cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名
  • 2、使用maven打包工具,将项目每个微服务都打包成app.jar
  • 3、将打包好的app.jar拷贝到cloud-demo每个对应的子目录中
  • 4、将cloud-demo上传至虚拟机,利用docker-compose up -d来部署docker-compose logs

7、搭建私有Docker镜像仓库

7.1、简化版镜像仓库

  • Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
docker run -d \
    --restart=always \
    --name registry	\
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry

7.2、图形化界面镜像仓库

  • 使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
	version: '3.0'
    services:
      registry:
        image: registry
        volumes:
          - ./registry-data:/var/lib/registry
      ui:
        image: joxit/docker-registry-ui:static
        ports:
          - 8080:80
        environment:
          - REGISTRY_TITLE=传智教育私有仓库
          - REGISTRY_URL=http://registry:5000
        depends_on:
          - registry
  • 配置Docker信任地址
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

7.3、私有镜像仓库拉取和推送镜像

  • 推送镜像到私有镜像服务必须先tag
1、重新tag本地镜像,名称前缀为私有仓库的地址: 192.168.21.100:8080/
	docker tag nginx:latest 192.168.21.100:8080/nginx:1.0
2、推送镜像
	docker push 192.168.21.100:8080/nginx:1.0
3、拉取镜像
	docker pull 192.168.21.100:8080/nginx:1.0

8、docker镜像安装

8.1、Zookeeper的安装

1、拉取zk镜像
  docker pull zookeeper:3.4.14
2、创建容器
  docker create --name zk -p 2181:2181 zookeeper:3.4.14
3、启动容器
  docker start zk

8.2、kafka的安装

1、下载镜像
	docker pull wurstmeister/kafka:2.12-2.3.1
2、创建容器
	docker run -d --name kafka \
		--env KAFKA_ADVERTISED_HOST_NAME=192.168.200.130 \
		--env KAFKA_ZOOKEEPER_CONNECT=192.168.200.130:2181 \
		--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.130:9092 \
		--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
		--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
		--net=host wurstmeister/kafka:2.12-2.3.1

注意:
	Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装kafka之前必须先安装zookeeper

8.3、搭建Redis集群

1、拉取镜像
  docker pull redis:5.0.2

# 开启组件集群  
  # 创建容器
    docker create --name redis-node01 -v /data/redis-data/node01:/data -p 6379:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf
    docker create --name redis-node02 -v /data/redis-data/node02:/data -p 6380:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf
    docker create --name redis-node03 -v /data/redis-data/node03:/data -p 6381:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf
  
  # 启动容器
    docker start redis-node01 redis-node02 redis-node03 
  # 进入redis-node01进行操作
  docker exec -it redis-node01 /bin/bash
  # 组建集群
    redis-cli --cluster creare 172.17.0.1:6379 172.17.0.1:6380 172.17.0.1:6381 --cluster-replicas 0
  # 查看容器的ip地址
    docker inspect redis-node01  -> 172.17.0.4
  
# 使用host网络搭建集群
  # 创建集群
  docker create --name redis-node01 --net host -v /data/redis-data/node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379
  docker create --name redis-node02 --net host -v /data/redis-data/node02:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380
  docker create --name redis-node03 --net host -v /data/redis-data/node03:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381

  # 启动容器
  docker start redis-node01 redis-node02 redis-node03
  
  #进入redis-node01容器进行操作
  docker exec -it redis-node01 /bin.bash
  
  # 192.168.21.100是主机的ip地址
  redis-cli --cluster create 192.168.21.100:6379 192.168.21.100:6380 192.168.21.100:6381 --cluster-replicas 0
  
  # 测试redis
  [root@localhost ~]# docker exec -it redis-node01 /bin/bash
  root@localhost:/data# redis-cli -c
  127.0.0.1:6379> set abc 123
  192.168.21.100:6380> get abc

8.4、MongoDB安装

1、拉取镜像
	docker pull mongo
2、创建容器
	docker create --name mongodb -p 27017:27017 -v /data/mongodb:/data/db mongo
3、启动容器  
	docker start mongodb
4、进入容器
	docker exec -it mongodb /bin/bash
5、使用mongodb客户端进行操作
	root@27fe09c11bca:/# mongo
6、查询所有的数据库  
	> show dbs

8.5、nacos安装

1、 镜像拉取
	docker pull nacos/nacos-server:1.2.0
2、 创建容器
	docker run --env MODE=standalone --name nacos --restart=always -d -p 8848:8848 nacos/nacos-server:1.2.0
		- MODE=standalone 单机版
		- --restart=always 开机启动
		- -p 8848:8848 映射端口
		- -d 创建一个守护式容器在后台运行
3、访问地址
	http://1.92.168.200.130:8848/nacos

8.6、redis安装

1、拉取镜像
	docker pull redis
2、创建容器
	docker run -d --name redis --restart=always -p 6379:6379 redis --requirepass "leadnews"
		- --requirepass "leadnews" 设置密码,密码为leadnews

8.7、ElasticSearch安装

1、拉取镜像
	docker pull elasticsearch:7.4.0
2、创建容器
	docker run 
		-id \
		--name elasticsearch \
		-d \
		--restart=always \
		-p 9200:9200 \
		-p 9300:9300 \
		-v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
		-e "discovery.type=single-node" \
		elasticsearch:7.4.0
3、配置中文分词器 ik
	注:因为在创建elasticsearch容器的时候,映射了目录,所以可以在宿主机上进行配置ik中文分词器;在选择ik分词器的时候,需要与elasticsearch的版本好对应上
	#切换目录
	cd /usr/share/elasticsearch/plugins
	#新建目录
	mkdir analysis-ik
	cd analysis-ik
	#root根目录中拷贝文件
	mv elasticsearch-analysis-ik-7.4.0.zip /usr/share/elasticsearch/plugins/analysis-ik
	#解压文件
	cd /usr/share/elasticsearch/plugins/analysis-ik
	unzip elasticsearch-analysis-ik-7.4.0.zip
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值