Docker系列1 - CentOS7安装Docker

https://docs.docker.com/engine/install/centos/
Docker官方文档

安装Docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
				  
sudo yum install -y yum-utils				  
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo				  
	
#如果在官网安装慢,使用阿里云的库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

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

sudo systemctl start docker  

#设置开机自动启动docker
sudo systemctl enable docker  

docker -v

运行容器

#查看本地镜像
docker images

#测试docker
docker run hello-world

#查看运行中的容器
docker ps

#查看所有的容器
docker ps -a

#安装nginx
docker run --name nginx -p 80:80 -d nginx

#查看nginx的日志
docker logs nginx

#连接到容器内部
docker exec -it nginx /bin/sh
docker exec -it nginx /bin/bash

#查看安装docker的信息
docker info

docker stop nginx
docker start nginx

#删除容器
docker rm nginx

#删除镜像
docker rmi nginx

#服务器重启后,docker启动时自动运行容器
docker run --name nginx -p 80:80 --restart=always -d nginx

#修改容器设置项
docker update 容器id --restart=always

#docker up不能修改端口
docker rm -f 容器id
docker run --name nginx -p 88:80 --restart=always -d nginx

镜像的推送

#将自己修改好的容器提交到镜像中
docker commit -a "zhangsan"  -m "优化" 容器id mynginx:v1.0


#保存镜像到本地文件
docker save -o intmall-nginx.tar mynginx:v1.0

#加载本地文件到镜像中(离线加载镜像)
docker load -i intmall-nginx.tar



# 把旧镜像的名字,改成仓库要求的新版名字
docker tag mynginx:v1.0 intmall/mynginx:v1.0

# 登录到docker hub
docker login       

# 推送
docker push intmall/mynginx:v1.0

#退出
docker logout

挂载外部文件

#挂载数据到外部修改(外部文件会覆盖容器对应目录的文件)
docker run --name=mynginx -d --restart=always -p 88:80 -v /data/html:/usr/share/nginx/html nginx

#从容器中向本地复制文件
docker cp 容器id:/etc/nginx/nginx.conf  /data/conf/nginx.conf

#把本地文件复制到容器里面
docker cp /data/conf/nginx.conf 容器id:/etc/nginx/nginx.conf

#在启动容器前,如果本地文件/data/conf/nginx.conf不存在,则会自动创建一个名称为/data/conf/nginx.conf的文件夹,导致容器启动失败
docker run --name=mynginx -d --restart=always -p 88:80 -v /data/html:/usr/share/nginx/html -v /data/conf/nginx.conf:/etc/nginx/nginx.conf nginx

#查看日志
docker logs 容器id 

启动关闭删除所有的容器

#启动所有容器

#启动所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

#关闭所有容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

#删除所有容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

#删除所有镜像(慎用)
docker rmi $(docker images | awk '{print $3}' |tail -n +2)

docker设置阿里云镜像加速

  1. 在阿里云站点开启容器镜像服务
    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

  2. 在本地添加配置文件

sudo mkdir -p /etc/docker  
sudo tee /etc/docker/daemon.json <<-'EOF'  
{  
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com", "http://hub-mirror.c.163.com", "https://rn2snvg1.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"  
}  
EOF
  1. 重新加载配置项、重启docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker

Docker启动中间件

安装Redis

#redis使用自定义配置文件启动
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d --name myredis -p 6379:6379 redis redis-server /etc/redis/redis.conf

安装ElasticSearch

# 创建数据目录
mkdir -p /mydata/es-01 && chmod 777 -R /mydata/es-01

# 容器启动
docker run --restart=always -d -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v es-config:/usr/share/elasticsearch/config \
-v /mydata/es-01/data:/usr/share/elasticsearch/data \
--name es-01 \
elasticsearch:7.13.4

#具名挂载:卷名不是一个具体的路径
#具名挂载会把容器内对应目录中的文件复制到具名的外部文件夹中
#我们可以选择性的覆盖指定文件,适合于配置文件较多而只需要修改少数据配置文件的场景
#如上面的:-v es-config:/usr/share/elasticsearch/config    #es-config是设定卷的名称,不是具体路径

docker volume ls

#查找卷对应的主机内目录
docker volume inspect es-config

#查看es-config中的由容器挂载出来的文件
ll /var/lib/docker/volumes/es-config/_data

#Elasticsearch错误日志:ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes]
docker logs es-01

#需要重新授权目录
ll /mydata/es-01/
chmod 777 -R /mydata/es-01

打包Docker镜像

编写一个Dockerfile文件

FROM openjdk:8-jdk-slim
LABEL maintainer=intmall

COPY target/*.jar   /app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

把打包好的java文件jar包放到Dockerfile文件同级的target目录中
执行命令打包生成镜像 docker build -t java-demo:v1.0 .


推荐学习资料

Docker基础(狂神说Docker课程笔记)
容器数据卷挂载,具名挂载和匿名挂载

你可能感兴趣的:(Docker,docker,运维,linux)