亲测有效:买了腾讯云,安装了centos8.0,进行docker操作
视频教学:
https://www.bilibili.com/video/BV1CJ411T7BK?p=28&spm_id_from=pageDriver&vd_source=1717654b9cbbc6a773c2092070686a95
一、docker的基本命令
cd~ 切到root目录下
docker images --查看docker镜像
docker search python --从远端仓库中寻找python
docker pull django --从远端仓库拉取django镜像
docker pull mysql:5.6 --从远端仓库拉取相应版本的mysql镜像
docker run -itd --name django1 django --使用django镜像创建django1容器
docker ps -a --查看所有容器
docker ps --查看正在运行的容器
docker exec -it django1 /bin/bash --进入django1容器的内部,每个容器相当于一个小型的linux系统,想要进入容器中,首先要启动容器。
exit() --从容器内部退出
exit --从镜像中退出
docker stop django1 --停止正在运行的容器
docker start django1 --开启关闭的容器
docker rm django1 --删除容器django1,删除容器的时候容器必须处于关闭状态
docker inspect c1 --查看容器c1的具体信息
docker rmi mysql:5.6 --删除mysql:5.6镜像,删除镜像前应该先删除由此镜像创建的容器
rm -rf mysql --删除centos系统中的文件夹
rm -f mysql --删除centos系统中的文件
systemctl start docker --启动docker
systemctl restart docker --重启docker
docker service docker stop --关闭docker
docker restart 容器名(或ID) --在容器中修改代码后,重启正在运行的容器
cd ~ --到根目录
cd …或cd / --到home目录
服务器的防火墙添加的端口号为宿主机的端口号
在后续重新修改代码部署时:
docker-compose up -d 在git pull后,需要停止容器、删容器、删镜像,然后使用这个命令自动创建镜像和容器
docker-compose up -d --build 在git pull后,需要停止容器、删容器,然后使用这个命令会自动删除镜像并重新创建镜像、容器
docker-compose down 在代码部署后,这个命令可以直接停止并删除容器
二、配置数据卷
1、docker run -itd --name=c1 -v /root/data:/root/data_container centos:latest /bin/bash -v参数:用来设置数据卷 后面代表宿主机目录与容器目录,c1为容器的名字,centos:latest是用来创建容器的镜像
1.1、先在宿主机中的data文件下创建一个文件看看data_container中会不会同步。cd ~,切到root目录,再用ls查看是否创建成功,先进入到宿主机的data目录下,创建一个itheima.txt文件touch itheima.text,再cd data_container容器中ls查看是否有itheima.txt文件,有说明配置数据卷成功。
1.2、再在data_container中创建一个文件看看宿主机中的data中会不会同步。在data_container中新建一个a.txt,echo itcast > a.txt,ls查看一下,再查看一下里面的内容,cat a.txt,显示itcast,通过exit退回到宿主机,再切回到宿主机的data文件夹下面查看一下。
1.3、我们删去c1容器。docker rm c1,再去宿主机中的data文件夹看看是否存在c1容器中的文件。
1.4、恢复删去的c1容器。docker run -itd --name=c1 -v ~/data:/root/data_container centos:latest。查看是否存在data_container容器,docker exec -it c1 /bin/bash,再回到容器的root目录,cd ~。cd data_container,存在即成功。
2、创建一个容器挂载多个目录
docker run -itd --name=c2 -v /root/data2:/root/data2 -v /root/data3:/root/data3 centos:latest /bin/bash。这样既在宿主机的root文件夹下创建了data2和data3,而且也在c2容器中创建了data2和data3。进入c2容器docker exec -it c2 /bin/bash,但是我只想进入容器的root目录下,所以我再cd ~,这样才行,有能直接到容器的root目录下的命令?要用dockerfile才行。
3、通过两个容器挂载同一个数据卷
docker run -itd --name=c3 -v /root/data:/root/data centos:latest,刚开始我创建一个c3的容器将宿主机的data文件挂载到c3中的data文件中,进入c3容器docker exec -it c3 /bin/bash,再cd ~到容器c3的主目录下,ls查看有data文件,再cd data进入,ls查看有a.txt和itheima.text文件,说明c3容器挂载数据卷成功。再用同样的方法创建c4容器,docker run -itd --name=c4 -v /root/data:/root/data centos:latest,查看到文件即成功。我们再c4的data文件下创建一个itcast.txt文件,echo itcast > itcast.txt,再看看宿主机的data文件夹和c3容器中的data文件夹下有没有这些文件。
4、配置数据卷容器
先将之前配置的c1 c2 c3 c4容器全部删除
4.1创建c3容器的数据卷。docker run -it --name=c3 -v /volume centos:latest
4.2将c1和c2容器挂载到c3的数据卷下。docker run -it --name=c1 --volumes-from c3 centos:latest,docker run -it --name=c2 --volumes-from c3 centos:latest。用ls查看是否有volume目录。我们在c3的volume下创建一个a.txt文件,touch a.txt,看看c1和c2的volume下是否有此文件。
三、docker应用部署
1、mysql部署
1.1首先在宿主机的root目录下创建一个mysql目录,mkdir mysql,再进入mysql目录下,然后再创建一个c_mysql容器,并进行端口映射。
docker run -id
-p 3306:3306
–name=c_mysql
-v $PWD/conf:/etc/mysql/conf.d
-v $PWD/logs:/logs
-v $PWD/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mysql:5.6
参数说明:
-p 3306:3306:将容器的3306端口映射到宿主机的3306端口
–v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器/etc/mysql/my.cnf配置目录
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs目录日志
-v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录
-e MYSQL_ROOT_PASSWORD=123456:初始化root 用户密码
1.2进入c_mysql容器,docker exec -it c_mysql /bin/bash,再进入mysql -uroot -p123456,show databases;,create database db1;,show databases;,use db1;。为啥用navicate连不上?可以了,得在服务器的防火墙添加规则那加一个3306端口。
2、Tomcat部署
2.1搜索Tomcat 镜像
docker search tomcat
2.2拉取mysql镜像
docker pull tomcat
2.3创建容器,设置端口映射、目录映射
首先在宿主机的root目录下创建一个tomcat目录,mkdir tomcat,再进入tomcat目录下,然后再创建一个c_tomcat容器,并进行端口映射。
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
在tomcat目录下创建一个test文件,mkdir test,cd test,写入index.html,vim index.html,按i键入,输入
,按esc健,输入:wq,按回车。在服务器的防火墙添加规则那加一个8080端口,去网站上输入网址49.234.9.240:8080/test/index.html,成功显示hello tomcat docker。 hello nginx docker
3、nginx部署
3.1搜索nginx 镜像
docker search nginx
3.2拉取nginx镜像
docker pull nginx
3.3创建容器,设置端口映射、目录映射
#在/root目录下创建nginx目录用于存储nginx数据信息
mkdir nginx
cd nginx
mkdir conf
cd conf
#在~/nginx/conf/下创建nginx.conf文件
vim nginx.conf
粘贴以下代码:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
cd…,再回到nginx目录下进行端口映射、目录映射
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
参数说明:
-p 80:80:将容器的80端口映射到宿主机的80端口
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
-v $PWD/html:/usr/share/nginx/html:将主机当前目录挂载到容器的/val/log/nginx日志目录
cd html,写入index.html,vim index.html,按i键入,输入
,按esc健,输入:wq,按回车。去网站上输入网址49.234.9.240,成功显示hello nginx docker。 hello nginx docker
4、Redis部署
4.1搜索redis 镜像
docker search redis
4.2拉取redis 镜像
docker pull redis:5.0
4.3创建容器,设置端口映射、目录映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
4.4使用外部机器连接redis
redis-cli.exe -h 192.168.187.129 -p 6379
四、Dockerfile
1、概念:
Dockerfile 是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员,可以为开发团队提供一个完全一致的开发环境
对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile 文件构建一个新的镜像开始工作了
对于运维人员,在部署时,可以实现应用的无缝移植
2、Dockerfile 关键字
Dockerfile指令说明简洁版:
FROM
构建镜像基于哪个镜像
MAINTAINER
镜像维护者姓名或邮箱地址
RUN
构建镜像时运行的指令
CMD
运行容器时执行的shell环境
VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器
USER
为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH
健康检查
ARG
构建时指定的一些参数
EXPOSE
声明容器的服务端口(仅仅是声明)
ENV
设置容器环境变量
ADD
拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY
拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT
运行容器时执行的shell命令
3、案例
3.1需求:
自定义CentOS7镜像。要求:
默认登录路径为/usr
可以使用vim
3.2实现步骤:
定义父镜像:FROM centos:7
定义作者信息:MAINTAINER crisp077
执行安装vim命令:RUN yum install -y vim
定义默认的工作目录:WORKDIR /usr
定义容器启动执行的命令:CMD /bin/bash
3.3创建使用dockerfile的镜像:
docker build -f ./centos_dockerfile -t itheima_centos:1 .
实例:
首先,拉取centos:7镜像,docker pull centos:7,拿它创建一个c4的容器,docker run -it --name=c4 centos:7,进入到root目录,cd ~,vi a.txt,我们目前只能这么操作,接下来我们自己制作一个itheima_centos:1的镜像,默认登录路径为/usr,还可以使用vim。
回到宿主机的根目录,用exit退出,创建docker-files文件,mkdir docker-files,cd docker-files,vim centos_dockerfile,写入
FROM centos:7
MAINTAINER itheima <[email protected]>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
按esc健,输入:wq,按回车。docker build -f ./centos_dockerfile -t itheima_centos:1 .。输入docker images查看镜像,发现已经创建了itheima_centos:7镜像,通过此镜像来创建c5容器,docker run -it --name=c5 itheima_centos:1,发现默认登录路径为usr,我们在cd ~到其根目录,输入vim a.txt,按esc健,输入:wq,按回车。发现该容器可以使用vim,之前的那个c4容器就无法使用vim。
五、Docker Compose
1、Dockers Compose 概述
Docker Compose 是一个编排多容器分布式部署的工具,提供命令集管理器化应用的完整开发期,包括服务构建,启动和停止。使用步骤:
(1)利用 Dockerfile 定义运行环境镜像
(2)使用 docker-compose.yml 定义组成应用的各服务
(3)运行 docker-compose up 启动应用
(4)运行 docker-compose up -d 启动应用,后台运行中
2、安装Docker Compose
#Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -v
3、案例
3.1 创建docker-compose目录
mkdir docker-compose,cd docker-compose,vim docker-compose.yml
3.2 编写docker-compose.yml文件
version: '3'
services:
nginx:
iamge: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
在创建./nginx/conf.d目录,mkdir -p ./nginx/conf.d,cd ./nginx/conf.d,vim itheima.conf,编写itheima.conf文件
server {
listen 80;
acess_log off;
location / {
proxy_pass https://app:8080;
}
}
退到docker-compose文件目录下,cd …/…/,使用docker-compose up启动容器。
六、Docker 私有仓库
1、私有仓库搭建
1.1、拉取私有仓库镜像
docker pull registry
1.2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
1.3、打开浏览器,输入地址
http://私有仓库服务器ip:5000/v2/_catalog,在服务器的防火墙加一个5000端口,看到{“repositories”:[]}表示私有仓库搭建成功
1.4、修改deamon.json
vim /etc/docker/daemon.json
#在上述文件中添加一个key,保存退出。
#此步用于让docker信任私有仓库地址
#注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{“insecure-registries”: [“49.234.9.240:5000”]}
1.5、重启docker 服务
systemctl restart docker
docker start registry
2、上传镜像到私有仓库
2.1、标记镜像为私有仓库的镜像
docker tag centos:7 49.234.9.240:5000/centos:7
2.2、上传标记的镜像
docker push 49.234.9.240:5000/centos:7
3、从私有仓库拉取镜像
先将49.234.9.240:5000/centos:7的镜像删除,docker rmi 49.234.9.240:5000/centos:7
#拉取镜像
docker pull 49.234.9.240:5000/centos:7
再用docker images一看镜像49.234.9.240:5000/centos:7又回来了。
七、docker和虚拟机的比较
容器就是将软件打包成标准化单元,以用于开发、交付和部署
容器镜像是轻量级的、可执行的独立软件包,包含软件运行所需要的所有内容:代码、运行时环境、系统工具、系统库和设置
容器化软件在任何环境中都能够始终如一地运行
容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突
相同:
容器和虚拟机具有相似的资源隔离和分配优势
不同:
容器虚拟化的是操作系统,虚拟机虚拟化的时硬件
传统的虚拟机可以运行不同的操作系统,容器只能运行同一类型的操作系统