大家好,这是本人学习Centos下docker的从零开始的笔记(后期可会制作关于win系统的,大家可以先大致了解下,在虚拟机中大致了解docker的使用,对docker有个大致的了解),在这里分享给大家,喜欢的朋友们可以点点关注,或者留言告诉我哪些地方可以改进现在我们开始一起学习吧!
概念
安装Docker
配置Docker的镜像加速器(这里我们选择阿里云的)
我们在阿里搜索容器镜像服务。
这里就不打码了,每个人只要有阿里账号就有一个自己的加速地址,请大家用自己的地址哦。
然后直接在centos把图片下面的命令复制过去就可以了
之后再打一条指令
cat /etc/docker/daemon.json
看有没有内容,内容一般就是你的加速地址,以后你如果想改地址,直接在这个文件中改自己的地址就好了。
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
docker images
docker search redis(这是一个软件名)
docker pull redis (不写版本号就是最新的版本号)
docker pull redis:5.0 (选择版本号注意这个冒号)
docker rmi (填写image ID)
docker rmi redis:latest (或者根据软件和版本号)
这里rm删除的意思, i是image镜像, 本人写容器下了一个centos:7
docker pull centos:7
docker ps 查看当前运行的容器
docker ps -a 查看历史全部容器
docker run -it --name=centos centos:7 /bin/bash
docker run -id --name=centos centos:7 /bin/bash
可以看到 [root@e48c3bef171c /]原来是[root@localhost /]
-i 是持续运行的意思,否则只有客户端连接才开启, -t 是在终端启动,使用命令行,命名随意,加上docker容器运行的环境centos:7, 后面是一个bin文件后的脚本 -d是守护进程的意思,输入exit后再查看容器,发现容器依旧在运行
总的来说 -it交互式容器,-id守护式容器
退出当前容器, 输入exit,这里为什么没显示localhost,因为我使用了putty连接不是在虚拟机本机中连接的。
docker exec -it centos /bin/bash
docker start centos(容器的名称)
docket stop centos(容器的名称)
docker rm centos(容器的名称或者容器的id)
docker rm ‘docker ps -aq’ 删除所有
注意注意,要在容器停止的时候删除哦
docker inspect centos
运行centos时一般会报错,这里顺便把这个问题也解决下
WARNING: IPv4 forwarding is disabled. Networking will not work
大家可以先访问这个链接查看,本人靠该方法解决
解决docker网络问题
注意注意,要先按下i,键盘上的i这是插入的意思,然后再输入
保存先按下esc,键盘上的esc,在输入:wq保存,注意这个:冒号
数据卷概念
数据卷作用
配置数据卷
docker run -it --name=centos-it -v /root/data/centos-it:/root/data/centos-it_container centos:7 /bin/bash
cd ~
ls
可以看到目录下有data文件
现在,继续用putty,连接我们的虚拟机, 操作数据卷
现在我们进宿主机的/root/data/centos-it目录下创建文件touch Dioecare.txt, 再进入容器的目录下查看,发现也多了一个文件
读者可以尝试将该容器删除,然后重新输入创建命令,发现容器内部文件依旧复原。
若要挂在多个目录
docker run -it --name=centos-it -v /root/data/centos-it:/root/data/centos-it_container -v /root/data1/centos-it:/root/data1/centos-it_container centos:7 /bin/bash
数据卷容器
多容器数据交换
1.多个容器挂载同一个数据卷
2.数据卷容器
配置数据卷容器
创建启动c3数据卷容器,使用-v参数, 设置数据卷
docker run -it --name -v /volume centos:7 /bin/bash
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
Mysql部署
案例:需求
在Docker容器中部署mysql,并通过外部mysq客户端操作mysql server
实现步骤:
1. 搜索mysql镜像
2. 拉取mysq镜像
3. 创建容器
4. 操作容器中的mysql
5. 测试访问
容器内的网络服务和外部机器不能直接通信
外部机器和宿主机可以直接通讯
宿主机和容器可以通讯
结论:
可以让宿主机的3307端口和容器的3306端口映射,外部机器访问宿主机的3307端口
搜索镜像
docker search mysql
拉取mysql镜像
docker pull mysql:5.7
创建目录(你现在应该在/root目录下)
mkdir mysql
cd mysql
执行
docker run -id \
-p 3307: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=ct980218 \
mysql:5.7
若出现网络警告,查看上一步骤,有说明
docker exec -it c_mysql /bin/bash
mysql -u root -p
ct980218
show databases;
create databases db1;
show databases;
打开navicat
创建链接
这里特别提醒,若出现容器一直无法开启,注意是否是进入了刚才创建的mysql路径!!!注意你如果是阿里云需要把3307端口打开
Tomcat部署
案例:需求
在Docker容器中部署Tomcat, 并通过外部机器访问Tomcat部署的项目
案例:实现步骤
搜索tomcat镜像
和mysql一样
docker search tomcat
docker pull tomcat
创建容器,设置端口映射,目录映射
mkdir ~/tomcat
cd tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
直接访问宿主机的ip地址加端口号,显示空项目
可以看到具体内容chen_dioecare
Nginx部署
案例:需求
在Docker容器中部署nginx,并通过外部机器访问nginx
案例:实现步骤
一样
docker search nginx
docker pull nginx
mkdir nginx
cd nginx/
mkdir conf
cd conf/
vi 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;
}
退回到nginx目录
cd …
pwd
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
访问宿主机的ip不用加端口,因为默认80,发现403页面显示,因为什么都没有,图就不放了。
cd html/
vi index.html
输入
chen_dioecare_nginx
保存后,再浏览器输入ip,发现出现chen_dioecare_nginx
Redis部署
直接写了,这么多个实例,各位看官们应该也懂了
docker search redis
docker pull redis:5.0。3
docker run -id --name=c_redis -p 6379:6379 redis:5.0.3
Docker镜像原理
解答:
docker镜像原理:
1.最底层的bootfs,并使用宿主机的bootfs
2.内核一样,所以在linux下安装win内核,不行因为内核不能用
3.rootfs基础镜像(centos和ubuntu)
4.往上叠加其他的镜像文件
比如tomcat,jdk
镜像制作
1.容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
docker commit f7cc7e0afb48 chen_tomcat:v1.0
docker images
docker save -o chen_tomcat.tar
docker images
docker load -i chen_tomcat.tar
Dockerfile概念及作用
Dockerfile关键字
案例
需求:
自定义centos7镜像。要求:
1.默认登录路径/usr
2.可以使用vim
案例:实现步骤
1.定义父镜像:FROM centos:7
2.定义作者信息:MAINTAINER chen <[email protected]>
3.执行安装vim命令: RUN yum install -y vim
4.定义默认的工作路径: WORKDIR /usr
5.定义容器启动执行的命令: CMD /bin/bash
cd /home
mkdir docker-files
cd docker-files/
vi centos_dockerfile输入步骤中的文字
FROM centos:7
MAINTAINER chen [email protected]
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
docker build -f ./centos_dockerfile -t chen_centos:v1.0 .
注意最后面还有个“.”这是一个寻址的路径
有5步, 就是5条命令
docker images
docker ps -a
docker run -it --name=c2 chen_centos:v1.0
看到一开始路径是/usr
使用vim 发现可用
Docker Compose
1.利用dockerfile定义运行环境镜像
2.使用docker-compose.yml 定义组成应用的各服务
3.运行docker-compose up 启动应用
安装docker compose
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
卸载docker compose
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
ok,大致的内容就这么多。还有需要的可以留言。我会继续补充