卸载docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装docker
#需要的安装包
sudo yum install -y yum-utils
#设置镜像仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#安装docker docker-ce 社区版 docker-ee 企业版
sudo yum install docker-ce docker-ce-cli containerd.io
#启动
systemctl start docker
#查看版本
docker version
#测试
docker run hello-world
#查看镜像
docker images
#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源 /var/lib/docker 默认工作路径
rm -rf /var/lib/docker
#新建目录
sudo mkdir -p /etc/docker
#写入配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qvlt5t3n.mirror.aliyuncs.com"]
}
EOF
#重启
sudo systemctl daemon-reload
#重启
sudo systemctl restart docker
可以在官网查看命令官网命令帮助
#显示版本信息
docker version
#显示docker系统信息
docker info
#docker帮助命令
docker 命令 --help
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 14 months ago 13.3kB
# REPOSITORY 镜像仓库源
# TAG 镜像的标签
# IMAGE ID 镜像的id
# CREATED 镜像的创建时间
# SIZE 镜像的大小
#-a, --all 显示所有镜像
#-f, --filter filter 过滤
#-q, --quiet 只显示镜像id
# 也可以去dockerhub搜
docker search 镜像名字
# 默认tag为latest
docker pull 镜像名字
[root@VM-12-15-centos ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #这里是真实地址
# 等价于 docker pull mysql docker.io/library/mysql:latest
#指定tag
docker pull 镜像名字:tag
docker rmi -f 容器id或名字 #删除指定容器
docker rmi -f 容器id 容器id #删除多个容器
docker rmi -f $(docker images -aq) #删除全部容器
有镜像才能创建容器,一个镜像可以创建多个容器,他们的关系就类似类和对象
的关系下载centos镜像测试学习
docker pull centos
docker run [ 可选参数 ] 镜像
# 可选参数
--name="容器名字" 容器名字 mysql1 mysql2 用来区分容器
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:80 -p 主机端口:容器端口 -p 容器端口
-P 随机指定端口
# 启动并进入
docker run -it centos /bin/bash
# 当前运行容器
docker ps [可选参数]
# 不加参数 当前运行的容器
# -a 表示 当前运行的容器+历史运行的容器
# -n=2 表示 显示最近创建的2个容器
# -q 表示 只显示容器id
exit #容器直接停止并退出
ctrl + p +q #退出容器不停止
docker rm 容器id # 删除指定的容器 不能删除正在运行的容器 强制删除rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止正在运行的容器
docker kill 容器id #强制停止当前容器
docker run -d 镜像名
docker run -d centos #后台运行centos镜像的容器
docker ps #发现没有在运行
#因为docker 后台运行必须有一个前台进程,docker没有发现应用会自己停止
docker logs 容器id
docker losg 容器id -tf 容器id #显示全部日志
docker logs -tf --tail 13 容器id #显示13条日志
docker top 容器id
docker inspect 容器id
#方式一 进入后开启新的终端
docker exec -it 容器id bashshell
#方式二 进入正在执行的终端
docker attach 容器id
docker cp 容器id:文件目录 主机目录
docker search nginx
docker pull nginx
docker images
docker run -d --name nginx01 -p 80:80 nginx
docker ps
docker exec -it 容器id /bin/bash
docker run -d --rm --name="mysql01" -e MYSQL_ROOT_PASSWORD=123456 mysql #--rm 用来测试 用完就删除容器,-e 环境配置修改
docker exec -it 容器id /bin/bash
docker stats #查看容器内存占用
一层又一层的文件,容器是运行在镜像的上一层,容器文件打包成一个镜像相当于在原来镜像的层又加了一层文件,变成了镜像。
789 #第三层
456 #第二层
123 #第一层
自己新建一个自己的镜像
docker commit 提交容器成为一个新的镜像副本
docker commit -a="作者名" -m="注释" 容器id 镜像名:tag名
直接使用命令来挂载 -v
,容器的文件和主机目录的文件同步
-v 主机目录:容器目录
没有指定则挂载目录全在/var/lib/docker/volumes/卷名/_data
-v 容器内目录
#查看卷
docker volume ls
-v 卷名:容器目录 #具名挂载 用的多
-v 容器目录 #匿名挂载
-v 主机目录:容器目录 #指定目录挂载
-v 卷名:容器目录:参数
参数可为 ro rw
ro (read only) 在容器只能读,rw在容器内可读可写
两个或者多个容器实现数据共享
容器1想要容器2的数据 容器2称为数据卷容器也叫父容器
创建容器的时候 容器1名字 --volumes-from 容器2的名字
相当于 容器1 extends 容器2
Dockerfile 就是用来构建docker镜像的文件,命令脚本。
dockerfile文件内容如下,文件的内容指令(大写)
FROM centos
VOLUME ["volume01","volume02"] #这里是匿名挂载容器两个根目录文件volume01和volume02
CMD echo "---------end---------"
CMD /bin/bash
FROM #基础镜像
MAINTAINER #镜像是谁写的 姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤,添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留的端口
CMD #容器启动的时候的命令 只有最后一个会生效,可被替代
ENTRYPOINT #容器启动的时候的命令 可以追加命令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建时设置环境变量
例如其中CMD ls -a 不能追加 ls -a -l
ENTRYPOINT ls -a 可以追加 ls -a -l
dockerfile 文件内容
FROM centos
MAINTAINER jhh<123@qq.com>
#设置环境变量MYPATH为/usr/loacl
ENV MYPATH /usr/local
#设置工作路径为MYPATH
WORKDIR $MYPATH
#安装vim
RUN yum -y install vim
EXPOSE 80
CMD echo "===end==="
CMD /bin/bash
构建镜像
# -f 为file指dockerfile文件 -t 为tag目标
docker build -f dockerfile -t mycentos:1.0 .
查看构建镜像的历史
docker history 镜像id
登录
[root@centos dockertest]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
打上标签
#打上标签
docker tag 本地镜像名字:tag 用户名/远程镜像名:tag
#查看镜像
docker images
# 发布
docker push 用户名/远程镜像名:tag
登录阿里云Docker Registry
docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com
拉取和推送
# 拉取
docker pull registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]
# 推送
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]
本质hosts映射,不推荐使用
网络模式
bridge: 桥接 (默认,自己设置也用这个)
none: 不配置网络
host: 和宿主机共享网络
docker network ls
默认创建是带有 --net bridge
docker run -d -P --name nginx01 --net bridge nginx
自己定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
使用自定义网络
docker run -d -P --name nginx01 --net mynet nginx
docker network connect mynet nginx01