安装Docker可以使用两种方式:一种是离线安装,一种是在线安装方式。
卸载旧版:
sudo yum remove docker-ce
docker-ce-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
安装yum工具
yum install -y yum-utils
设置yum仓库地址
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
更新yum缓存
yum makecache fast
安装新版docker
yum install -y docker-ce docker-ce-cli container.io
启动docker
systemctl start docker
设置docker开机启动
systemctl enable docker
修改镜像地址:(由于国内网络问题,需要使用加速地址)
修改配置文件/etc/docker/daemon.json,将这段代码直接在命令行中使用,cat命令会添加的
cat < /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
重新加载docker配置
systemctl daemon-reload
重启docker服务
systemctl restart docker
查看镜像配置
docker info
下载需要的镜像:(下载需要的,比如说nginx,mysql,nacos等等,并且可以指定版本)
docker pull hello-world
检查下载的docker镜像
docker images
运行docker镜像
docker run hello-world
检查已启动的docker服务(正在运行的)
docker ps
查看所有镜像,包含没有运行的镜像
docker ps -all #all可以简写成a
docker ps -a
停止docker容器
docker stop 容器ID前几个字母就行
删除docker容器
docker container rm 容器名或容器ID
删除所有终止状态容器
docker container prune
删除docker镜像
docker image rm hello-world
进入指定容器
docker exec -it 容器ID bash
退出容器
exit
查看容器日志信息
docker container logs 容器ID
查看容器的信息(能够查看挂载目录信息)
docker [volume/container] inspect 容器ID或数据卷ID
信息可能不多,也可能很多一堆,其中有个Mounts的目录,这个目录就是挂载目录,Source:目录挂载时的本地目录,Destination:目录挂载时的容器目录。
挂载主机目录(常用):
docker run -it -v /usr/app:/opt/app centos:7 bash
挂载目录就是让双方这两个目录保持一致,一旦有一个目录里面的文件修改了,则另一个也会发生改变。
/usr/app:这个目录是宿主机的目录
/opt/app:容器的目录
-v的意思是指定挂载目录,如果宿主机目录或容器目录不存在,docker会自动创建响应的目录。
注意:如果有容器正在使用镜像的话,当你删除镜像的时候,是会报错的,必须得先删除使用这个镜像容器,才能再删除镜像。
下载centos7镜像
docker pull centos:7
查看下载镜像
docker images
或者
docker image ls
运行centos7镜像
docker run -idt centos:7 bash
参数-it:i的意思是交互式操作,d是后台运行容器,t是终端,bash是打算进入bash执行一些命令并查看返回结果,因此我们需要交互式终端。bash放在镜像名后的是命令,这里我们希望有个交互式shell,因此用的是bash.
查看正在运行的容器
docker ps
查看所有容器(正在运行和没有运行的)
docker ps -a
删除镜像:
docker image rm 镜像ID或镜像名
创建数据卷container-vol
docker volume create container-vol
查看所有数据卷
docker volume ls
查看指定数据卷的信息
docker volume inspect container-vol
或者省略volume
docker inspect container-vol
启动挂载数据卷的容器
docker run -it --mount source=container-vol,target=/root centos:7 bash
或者简写
docker run -it -v container-vol:/root centos:7 bash
删除数据卷(如果数据卷正在被容器使用则无法删除)
docker volume rm container-vol
如果有容器正在使用数据卷,会提示错误,则需要先执行删除容器操作,再执行删除数据卷命令,才能删除数据卷
docker container rm 容器ID
Dockerfile文件是一个用来构建镜像的文本文件,文本包含了一条条构建镜像所需的指定和说明,我们通常会基于此文件创建docker镜像。
注意:文件名必须时Dockerfile,需要自己手动的创建,所以必须博正单词写的正确,大小写,空格都对!而且,在复制下面这个语句的时候,可能会发生单引号变成中文的问题哦,要注意点!
安装:,以jdk为例
将压缩包放到Dockerfile同目录下将JDK的压缩文件放到同目录下
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
2.使用Dockerfile构建镜像(必须在Dockerfile所在目录执行docker指令)
docker build -t jdk:8 . #不要丢掉这里的点,-t表示镜像标识(镜像名),是tar单词的缩写
注意:末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名,执行完就能使用命令docker images在docker中看到jdk的镜像了!
3.运行镜像:
docker run -it jdk:8 bash
这里的jdk:8是镜像名
4.查看环境变量:
echo $PATH
当你身边的同事或者什么情况的,导致网络下不下来的时候,可以自己打一个包给他们!
docker save jdk:8 | gzip > jdk8.tar.gz
2.导入docker容器
注意:要在jdk8.tar.gz
docker load < jdk:8.tar.gz
**打包:**以sentinel为例
将sentinel的jar包放到/root/servers/目录下
docker run -d -p 8180:8080 --name sentinel \
-v /root/servers:/usr/sca \
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
在浏览器中输入地址访问sentinel,没出问题的话,是能够访问的
http://192.168.126.131:8180
这说明jar包没问题,但是docker镜像库中没有sentinel这个镜像
找一个目录(/root/servers/),创建Dockerfile文件,用vim打开
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
使用Dockfile构建镜像(一定要在Dockerfile文件所在的目录下执行)
docker build -t sentinel:8 . #不要忘记这个点
运行完这个命令,在docker的镜像库中就能看到sentinel的镜像了!
运行sentinel容器
docker run -d -p 8180:8080 sentinel:8
查看日志(如果启动没启动就看看日志吧,看看什么原因)
docker container logs 容器ID
下载镜像:
docker pull mysql:8.0.23
查看镜像
docker images
启动MySQL镜像
sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23
登录数据库
进入mysql运行的那个容器
docker exec -it mysql bash
mysql -uroot -p
root
停止mysql服务
docker stop mysql运行容器的id
启动mysql服务
docker start mysql运行容器的id
设置开机自启动
docker update mysql --restart=always
下载redis
docker pull redis
创建redis的配置文件目录
mkdir -p /usr/local/docker/redis01/conf
touch /usr/local/docker/redis01/conf/redis.conf
为什么创建这个目录,然后又创建了文件呢?
因为我们接下来要执行的挂载命令中会出点问题,当我们不自己创建这个目录的时候,在挂载的时候,docker容器会自动认为这个redis.conf是一个文件夹而不是一个文件,这样的话,两边就创建了对应的redis.conf文件,但其实redis.conf是redis的配置文件。
启动容器并挂载对应的目录
sudo docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
查看正在运行的redis容器
docker ps
进入正在运行的redis容器
docker exec -it redis01 bash
检查redis版本
redis-server -v
登录redis
redis-cli -v
停止redis容器(其实就是停止redis服务)
docker stop redis01
启动redis容器(其实就是启动redis服务)
docker start redis01
重启redis容器(其实就是重启redis服务)
docker restart redis01
查看redis服务日志
docker container logs redis01
从远程镜像库拉取nginx镜像到本地docker镜像库
docker pull nginx
查看下载的镜像
docker images
创建数据卷来运行nginx服务(这个对象会在宿主机直接创建一个目录,使用docker inspect nginx-vol可以查看)
docker volume create nginx-vol
查看数据库
docker volume ls
查看nginx-vol数据卷的位置
docker inspect nginx-vol
默认位置是:
/var/lib/docker/volumes/nginx-vol/_data
运行nginx服务的那个数据卷(其实就是运行nginx服务)
docker run --name nginx -p 80:80 \
-v nginx-vol:/etc/nginx \
-d nginx
其中,/etc/nginx是nginx容器启动时,nginx镜像文件默认的解压目录。
以后要修改nginx的配置,可以直接去nginx-vol数据卷对应的目录去修改。
访问Nginx
http://192.168.126.131/
停止Nginx服务
docker stop nginx
启动Nginx服务
docker start nginx
重启Nginx服务
docker restart nginx
拉去Nacos(hub.docker.com)
docker pull nacos/nacos-server:1.4.1
在mysql中执行nacos的sql脚本文件
使用docker inspect mysql命令查看mysql的挂载目录
我们通产是放在conf里面的,所以在Mounts中能够找到对应挂载目录,宿主机
/usr/local/docker/mysql/conf 对应 容器的 /etc/mysql 目录
{
"Type": "bind",
"Source": "/usr/local/docker/mysql/conf",
"Destination": "/etc/mysql",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
将nacos-mysql.sql文件放到宿主机的/usr/local/docker/mysql/conf目录下
进入MySQL镜像容器中
docker exec -it mysql bash
登录Mysql
mysql -uroot -p
root
查看对应的挂载目录是否有nacos-mysql.sql文件
cd /etc/mysql
ls
如果挂载目录没有出错的话,肯定是在的
执行sql脚本,没有这个数据库,nacos运行不了,里面有几个表包括User登录用户
source /etc/mysql/nacos-mysql.sql
创建并启动nacos容器
docker run \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.126.131 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1
注意:不要忘记修改数据库的IP地址,修改数据库登录用户和密码(我们学习的时候一般都是root)
参数说明
单节点模式
MODE=standalone
数据库地址
MYSQL_SERVICE_HOST
数据库用户名
MYSQL_SERVICE_USER
数据库密码
MYSQL_SERVICE_PASSWORD
需连接的数据库名称
MYSQL_SERVICE_DB_NAME
端口映射
-p 8848:8848
设置任意时候重启容器,凯子就能自动启动容器(需要设置docker为开机自启)
–restart=always
在浏览器中查看
http://192.168.126.131:8848/nacos/
如果发生错误,使用docker container logs nacos查看日志
6.停止nacos服务
docker stop nacos
7.启动nacos服务
docker start nacos
8.重启nacos服务
docker restart nacos
Docker中存在多个容器时,容器之间经常需要进行通讯,这又该怎么办呢?。
解决方案:
创建网络容器
docker network create -d bridge t-net
参数-d是driver网络类型的意思。
t-net是我们自己给它起的网络名字
查看网络信息
docker network ls
可能会看到还有几个没见过的网络,它本身就创建有网络
查看网络信息
docker inspect 网络ID