一.docker安装
1.yum安装gcc相关环境
yum -y install gcc
yum -y install gcc-c++
2. 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.安装需要的软件包
yum install -y yum-utils
4. 设置镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
5. 更新yum软件包索引
yum makecache fast
6.安装 Docker CE
yum install docker-ce docker-ce-cli containerd.io
7. 启动 Docker
systemctl start docker
8.测试
docker version
二.卸载docker
systemctl stop docker
yum -y remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
三.阿里云镜像加速
四.重要命令
1.容器启动命令
docker run -it #容器ID /bin/bash #前台启动,执行后会打开容器内的命令界面
docker run -d #容器ID #后台启动容器,不打开容器内的命令界面,有些容器启动后会自己挂掉
docker run -dit #容器ID #后台方式启动容器,且保证容器进程启动后不会自己挂掉
2.退出容器命令界面
exit #退出命令界面,且容器进程退出
快捷键 CTRL P+Q #退出命令界面,但容器进程不退出
3.进入容器命令界面
docker attach #容器ID #从已存在的bash终端进入容器,exit退出会导致容器进程退出
docker exec -it #容器ID /bin/bash #新开辟一个bash终端进入容器,exit退出不会导致容器进程退出
4.容器完整启动命令
docker run -dit -p 宿主端口:容器端口 --name 自定义容器名称 -v(挂载宿主目录) 宿主目录:容器目录 -e "环境变量" 镜像ID(或名称:tag)
使用-P时,则宿主端口和容器端口随机映射
5.从容器创建一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
五.常用命令
六.可视化容器管理界面(了解)
- Portainer,一般用在单宿主机上
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock -- privileged=true portainer/portainer
- Rancher(CI/CD再用这个)
#安装rancher-server
docker run --name rancher-server -p 8000:8080 -v /etc/localtime:/etc/localtime:ro -d rancher/server
#安装agent
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://39.101.191.131:8000/v1/scripts/D3DBD43F263109BB881F:1577750400000:7M0y BzCw4XSxJklD7TpysYIpI
七.使用数据卷:
- 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume维护
docker volume ls
- 具名挂载
-v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看挂载的路径
[root@kuangshen ~]# docker volume inspect nginxconfig
[
{
"CreatedAt": "2020-05-13T17:23:00+08:00",
"Driver": "local", "Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginxconfig/_data",
"Name": "nginxconfig",
"Options": null, "Scope": "local"
}
]
- 改变文件的读写权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx
- 数据卷容器
#--volumes -from
# docker run -it --name docker02 --volumes-from docker01 kuangshen/centos
docker02会把docker01的挂载配置复制到自己这里,则docker01和docker02都将挂载宿主机的同一个目录。
八.DockerFile
1.关键字
2.案例:
3.通过DockerFile构建镜像
# docker build -f DockerFile文件 -t 镜像名称 .
4.CMD与ENTRYPOINT的区别:
1.CMD允许出现多次(仅最后一次有效),但ENTRYPOINT只允许出现一次
2.CMD代表着docker run容器时的一种默认执行命令。
当docker run后面不接任何命令时,将执行最后一个CMD的命令
当docker run后面参数带命令时,将不执行DockerFile中CMD定义的命令,而执行docker run后面接的命令
3.当出现ENTRYPOINT时,CMD将无效,docker run启动时将只会认定ENTRYPOINT的命令
且docker run后的参数 将不被当做命令看待,而是当做ENTRYPOINT的命令参数看待
九.docker0网络
在我们docker run启动一个容器(且不指定网络)时,docker会自动将容器加入到docker0这个网络下。且每启动一个容器,在宿主机和容器内执行ip addr时,将发现新增一对网卡
在同一个docker0网络下的容器是可以互相ping通的,但需要先获取各个容器的地址来ping
#docker exec -it tomcat02 ping 172.18.0.2
这时我们可以通过--link命令来定义新启动容器的host文件,实现域名ping
#docker run -d -P --name tomcat03 --link tomcat02 tomcat
此时tomcat03可以ping tomcat02,但02却不能平03,因为该命令只在tomcat03容器内定义了host文件
十.自定义网络
由于docker0网络,想通过域名来实现容器互联较为麻烦,因此自定义网络诞生了
1.创建自定义网络
# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--
volumes
-
from
![](https://i-blog.csdnimg.cn/blog_migrate/67132e72f61aeb8a3a821e7a145dc1a7.png)
2.如何让两个网络内的容器互通呢,比如docker0和mynet ,使用docker network connect命令
![](https://i-blog.csdnimg.cn/blog_migrate/737b9a2819aa703f591a55ffecfdb8d4.png)