docker学习之旅

docker学习之旅

    • 安装卸载docker
    • 镜像的基本命令
    • 容器命令
    • docker下安装nginx
    • docker下安装tomcat
    • dockers Portainer可视化面板安装
    • 如何提交一个自己的镜像
    • docker容器数据卷
    • docker下安装mysql使用卷技术
    • 具名和匿名挂载
    • 学习DockerFile
      • dockerfile指令学习
    • 数据卷容器

安装卸载docker

#开始docker安装卸载之旅 官方文档
https://docs.docker.com/engine/install/centos/#uninstall-docker-engine
#卸载之前的旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
Install using the repository # 使用仓库进行安装

#下载一些安装包
yum install -y yum-utils
#使用阿里云镜像地址下载
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新yum软件包索引
yum makecache fast 
#Install Docker Engine 安装docker最新引擎
yum install docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl start docker
# 查看docker安装成功的版本
docker version
# 运行docker hellow-world
docker run hello-world
# 查看docker镜像
docker images

# 卸载docker 
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

#配置阿里云镜像加速器
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://151e2jab.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

docker学习之旅_第1张图片

镜像的基本命令

官方文档命令:https://docs.docker.com/reference/

docker镜像商店 docker hub:
https://hub.docker.com/search?q=mysql&type=image

docker images
#帮助命令
docker search --help
#搜索镜像
docker search 镜像名称
docker search mysql
# 搜索出来的镜像就是STARS大于3000的
docker search mysql --filter=STARS=3000 
#下载镜像
docker pull 镜像名称
#拉取最新版的
docker pull mysql
#拉去指定版本的
docker pull mysql:tag
例如:docker pull mysql:5.7
#删除镜像
docker rmi -f image id
例如:docker rmi -f 4f54657
#删除多个容器
docker rmi -f 多个id空格隔开
#删除全部容器
docker rmi -f $(docker images -a)

容器命令

#启动一个容器
docker run [可选参数] image(镜像名称)
#参数说明
--name 容器名字别名 tomcat1 mysql1 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p  指定容器的端口 -p 8080:8080
   -p ip:主机端口:容器端口
   -p 主机端口:容器端口
   -p 容器端口
   容器端口
   
# 直接停止并退出容器
exit
#退出容器不停止
快捷键 Ctrl + P +Q
#查看所有正在运行的容器
docker ps 
#查看所有运行的容器
docker ps -a
#删除容器
docker rm -f 容器id [不能删除正在运行的容器]
docker rm -f $(docker ps -a)
#启动和停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
#查看日志
docker log -f --tail 容器id
docker log -tf --tail 100 容器id
#查看容器中进程的信息
docker top 69d86233ee08
#查看容器中的元数据
docker inspect 3febd4d1ee5c
#进入当前正在运行的容器
docker exec -it 容器id(或者容器名称) bashShell
例如进入mysql容器
docker exec -it 3febd4d1ee5c /bin/bash
#进入当前正在运行的容器,不会启动新的进程 
docker attach 容器id  
#拷贝命令
docker cp 容器id:/home/test.java /home
把容器中home目录下的test.java文件拷贝到主机外的home目录下

docker下安装nginx

docker search nginx
docker pull nginx
docker images
docker run -d --name nginx01 -p 3344:80 nginx
docker ps 
#在启动多一个nginx命名为nginx02
docker run -d --name nginx02 -p 3345:80 nginx
#查看是否启动成功
curl localhost:3344
#进入nginx容器
docker exec -it nginx01 /bin/bash

docker学习之旅_第2张图片
进阶:
每次修改nginx配置文件都需要进入到容器当中?十分的麻烦,是否可以在容器外部提供一个映射路径,达到在容器外部膝盖文件时,容器内部自动修改?-v数据卷

docker下安装tomcat

docker search tomcat
docker pull tomcat
#拉取指定版本
docker pull tomcat:9.0
docker images
docker run -d --name tomcat01 -p 8080:8080 tomcat
docker ps
docker exec -it 4675ad9bf3a5 /bin/bash
#docker官方tomcat webapps下是没有内容的,需要拷贝webapps.dist目录下的所有文件
cp -r webapps.dist/* webapps

dockers Portainer可视化面板安装

docker run -d -p 18070:9000 \
--restart=always -v /var/run /docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

如何提交一个自己的镜像

commit镜像
如果想保存当前容器的状态,就可以通过commit来提交,获得一个镜像。

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
例如:
docker commit -m="add webapp files" -a="yzq" c73e7618c271 tomcat01:1.0

docker镜像原理联合文件系统,分层思想。
docker学习之旅_第3张图片

docker容器数据卷

docker概念,将应用和环境打包成一个镜像
如果数据都在容器当中,那么容器删除就会造成数据丢失,因此数据需要持久化
容器之间可以有一个数据共享的技术,docker容器中产生的数据,同步到本地,这就是卷技术,也就是目录的挂载,将容器内的目录挂载到linux上。
docker学习之旅_第4张图片

 #直接使用命令来挂载 -v
 docker run -it -v 主机目录:容器内目录
 #将容器cetos home目录下的所有文件挂载到主机/home/ceshi目录下
 docker run -it -v /home/ceshi:/home centos /bin/bash
 #容器起来后,通过docker inspect 容器id查看挂载的卷信息

docker学习之旅_第5张图片
docker学习之旅_第6张图片

docker下安装mysql使用卷技术

mysql数据持久化的问题

docker search mysql 
docker pull mysql:5.7
docker images
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# -d 后台运行,-p端口映射, -v卷挂载, -e环境配置,--name容器别名

具名和匿名挂载

#匿名挂载 -v 容器内路径
docker run -d -p 80:80 -v /etc/nginx nginx
#查看所有卷的情况
docker volume ls 
#docker volume inspect 卷名
#具名挂载
docker run -d -p 80:80 -v juming-nginx:/etc/nginx nginx nginx
#所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /主机指定路径:容器内路径 #指定路径挂载
#只读,容器内是不能修改文件的,只能通过主机
docker run -d -p 80:80 -v juming-nginx:/etc/nginx nginx:ro nginx
#可读可写
docker run -d -p 80:80 -v juming-nginx:/etc/nginx nginx:ro nginx

docker学习之旅_第7张图片

学习DockerFile

首先创建一个自己的镜像

mkdir -p docker-volume
#写脚本命令(命令都大写)
vim dockerfile1
FROM centos
VOLUME ["volume01","volume02"]

CMD echo "---end--"
CMD /bin/bash
#构建 -f 构建哪个路径下的脚本命令 -t构建的镜像名:tag版本号
docker build -f /home/docker-file/dockerfile1 -t yzq-centtos:1.0 .

docker images

docker学习之旅_第8张图片
容器内的文件volume01,volume02是通过匿名挂载的
docker学习之旅_第9张图片

  • dockerfile是用来构建docker镜像文件的,也就是命令参数的脚本文件。
  • 作用可以将自己的代码和所需的运行环境构建成一个镜像发布。
  • 基础知识:
    1、指令必须都是大写的形式
    2、执行从上到下顺序执行
    3、#代表注释
    4、每一个指令都会创建提交一个新的镜像层,并提交
    docker学习之旅_第10张图片
    看官方文档是怎么构建的
    docker学习之旅_第11张图片
    docker学习之旅_第12张图片
    docker学习之旅_第13张图片

dockerfile指令学习

docker学习之旅_第14张图片

FROM    #基础镜像,一切从这里开始
MAINTAINER   #镜像是谁写的 姓名+邮箱
RUN   #镜像构建的时候需要运行的命令
ADD    #比如需要添加一个tomcat镜像,就需要添加一个tomcat的压缩包。
WORKDIR  #镜像的工作目录
VOLUME    #镜像挂载目录 
EXPOSE  #暴露的端口
CMD   # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
CMD ["ls","-a"]  
#启动镜像docker run -it centos01 相当docker run -it centos01 ls -a
但是在后边追加-l会报错,因为-l直接替换了ls -a,而ENTRYPOINT则不会,他是在后边追加编程 ls -al
ENTRYPOINT   #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD    #当构建一个被继承Dockerfile 这个时候就会运行ONBUILD的指令,触发指令。
COPY  #类似ADD,将我们的文件拷贝到镜像中
ENV   #构建的时候设置环境变量

创建一个自己的centos

#1、创建dockerfile脚本文件
FROM centos
MAINTAINER yzq<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD echo $MYPATH
CMD echo "--end--"
CMD /bin/bash

#2、通过这个dockerfile文件构建镜像
docker build -f dockerfile文件的路径 -t 镜像名:[tag]

#可以通过docker history  镜像id 查看这个镜像的构建过程
docker history  8d6d0c8a28a1

docker学习之旅_第15张图片

数据卷容器

docker学习之旅_第16张图片
这是一个备份拷贝机制,即使某个容器断了,也不影响其他容器的正常备份,知道所有容器被停止了为止。

#将容器2挂载在容器1上,也就是容器2继承容器1 
docker run -it --name 容器2别名 --volumes-from 容器1   容器1的镜像名(或者镜像id)
#先启动centos01
docker run -it --name centos01 yzq-centtos:1.0 /bin/bash
#将centos02挂载在容器centos01上
docker run -it --name centos02 --volumes-from centos01 yzq-centtos:1.0
#多个mysql实现数据共享
#启动容器mysql01
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#将mysql02挂载在容器mysql01上
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:5.7

docker学习之旅_第17张图片

你可能感兴趣的:(Linux)