Docker
Docker基本组成
- 镜像:docker就像一个模板,可以通过这个模板来创建容器服务,一个镜像可以创建多个容器
- 容器:docker利用容器技术,独立运行一个或一组应用,通过镜像来创建
- 仓库:存放镜像的地方,仓库分为共有仓库和私有仓库
Docker常用命令
docker服务命令
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
docker info
docker --help
docker version
systemctl stop firewalld.service 关闭防火墙
镜像命令
docker images # 查看本地镜像
docker search mysql# 搜索镜像
docker pull mysql:5.7# 下载镜像
docker rmi 562c9bc24a08 # 删除镜像 根据IMAGE ID
docker image ls#查看所有已下载的镜像
容器命令
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字
-d 后台方式运行
-it 使用交互方式进入容器查看内容
-p 指定容器的端口
-p 主机端口:容器端口
-p 容器端口
容器端口
docker run #创建并启动一个容器,在run后面加上-d参数,则会创建一个守护式容器在后台运行。
docker run --name firstContainer busybox:lastest echo "hello world" #以firstContainer的名字启动容器 并输出“hello world”
容器命令(补充1)
docker start 容器id
docker restart 容器id
docker top 容器id # 查看容器中的进程信息
docker logs -t id # 查看日志产生的日期
docker logs -f id # 查看实时产生的日志
docker logs -tf id # 显示日志
docker logs --tail 1000 id # 显示1000日志
docker logs --tail="10" id # 同上
docker inspect 容器id #查询容器信息 镜像的元数据
docker stop $(sudo docker ps -aq) #停止所有的容器
docker stop 容器id #停止容器id
docker kill 容器id #非优雅的停止容器
docker rm 容器id #删除容器id
docker rm $(sudo docker ps -aq)#通过id查询删除所有容器
docker rm -f $(sudo docker ps -aq)#不需要停止容器,就直接强制删除容器
docker rm $(sudo docker ps -a -q) #删除所有未运行的容器
docker search elasticsearch con_id #搜索镜像文件
docker ps -a #查看已经创建的容器
docker ps -s #查看已经启动的容器
docker ps -a -q #查看全部的容器的容器id
docker ps -f "name=official" #模糊查询容器名叫official的
docker ps -f "id=fdsfq134123df3213" #模糊查询
docker cp 容器id:容器内路径 目录的主机路径 #将文件从容器中拷贝到本机
docker rename old_name new_name #重命名一个容器
docker exec -it 容器id # 进入正在运行的容器 打开一个新的终端
docker exec -it 容器id /bin/bash #进入容器
docker attach 容器id # 进入正在运行的容器 不会启动新的进程
docker commit container1 centos:v1# 提交container成为一个叫busyboc的镜像
exit # 退出容器并停止容器运行
Ctrl + P + Q # 退出容器但不停止运行
容器命令(补充1)
docker save busbox:latest > busybox.tar #busybox:latest镜像保存到tar包
dockerload < busybox.tar #从tar包加载busybox:latest镜像
docker export busyboxContainer > busyboxContainer.tar #然后将busyboxContainer导出为容器快照:busybox.tar
cat busyboxContainer.tar | docker import - busybox:v1.0 #最后使用该容器快照导入镜像,镜像名为busybox:v1.0。
#构建一个私人仓库
docker pull registry:2
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
#使用docker tag给busybox加上一个标签localhost:5000/my-busybox:latest
docker tag busybox:latest localhost:5000/my-busybox:latest
docker push localhost:5000/my-busybox #将镜像推送到私人仓库
docker pull localhost:5000/my-busybox #从私人仓库拉取镜像
docker rm -vf myregistry #删除私人仓库并将私人仓库中的镜像也删除掉
Dockerfile命令:
通过echo命令将命令写到Dockerfile中去
echo 'FROM busybox' > Dockerfile#以busybox为基础镜像
echo 'RUN touch hello.txt'>> Dockerfile#在基础镜像的基础上,创建一个hello.txt文件
echo 'ADD ./dir1.tar /' >> Dockerfile#并将上下文目录下的dir1.tar“解压提取后”,拷贝到busybox:v3的/
echo 'ENTRYPOINT ["df"]' >> Dockerfile#默认情况下,将启动命令设置为df -TH。要求df命令不能被覆盖,但是-Th能被覆盖
echo 'CMD ["-Th"]' >> Dockerfile#
echo 'EXPOSE 3000' >> Dockerfile#声明暴露3000端口
echo 'ENV var1=test' >> Dockerfile#将变量var1=test设置为环境变量
echo 'WORKDIR /tmp' >> Dockerfile#设置工作目录为/tmp
docker build -t busybox:v3 . #以该Dockerfile构建一个名为busybox:v3的镜像
数据卷也很重要:
docker volume create --name vo1 #新建一个叫vo1的数据卷
docker run -itd -v /data ubuntu /bin/bash #创建了一个“随机名字”的volume,并挂载到容器的/data目录。
docker run -itd -v vo2:/data ubuntu /bin/bash #创建一个名为vo2的数据卷,并将其挂载到容器的/data目录下
docker run --name container2 --volumes-from container1 ubuntu#和container1共享数据卷
docker inspect --type container --format='{{range .Mounts}}{{.Name}}{{end}}' container1#输出容器container1创建的数据卷的名字
docker rm -v container1#删除container1对应的数据卷,其实是解绑
docker volume rm vo4#删除名为vo4的数据卷,真的删除,要先解绑才能删除
# 创建一个vo1的数据卷,并在数据卷中添加1.txt文件
docker run --name vocontainer1 -v vo1:/dir1 ubuntu touch /dir1/1.txt
#1.将vo1数据卷的数据备份到宿主机的/newback中,将容器的/backup路径挂载上去,并将容器内/dir1文件夹打包至/backup/backup.tar
docker run --volumes-from vocontainer1 -v $(pwd):/backup ubuntu tar -cvf /backup/backup.tar /dir1
#2.将保存在宿主机中备份文件的数据恢复到vocontainer2的/中
docker run --volumes-from vocontainer2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /
https://docker-practice.github.io/zh-cn/ 这个学docker应该还可以