#开始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
官方文档命令: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 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
进阶:
每次修改nginx配置文件都需要进入到容器当中?十分的麻烦,是否可以在容器外部提供一个映射路径,达到在容器外部膝盖文件时,容器内部自动修改?-v数据卷
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
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容器中产生的数据,同步到本地,这就是卷技术,也就是目录的挂载,将容器内的目录挂载到linux上。
#直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
#将容器cetos home目录下的所有文件挂载到主机/home/ceshi目录下
docker run -it -v /home/ceshi:/home centos /bin/bash
#容器起来后,通过docker inspect 容器id查看挂载的卷信息
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
首先创建一个自己的镜像
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
容器内的文件volume01,volume02是通过匿名挂载的
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
这是一个备份拷贝机制,即使某个容器断了,也不影响其他容器的正常备份,知道所有容器被停止了为止。
#将容器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