Docker基础使用
wget -O /etc/yum.repos.d/CentOs-Base.repo http://mirrors.aliyun.com/repo/
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel.repo
yum install -y base-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.all_filter = 0
如果报错,则执行: modprobe br_netfilter
sysctl -p /etc/sysctl.d/docker.conf
提前配置好yum仓库阿里云自带的仓库 阿里云提供的docker专属仓库
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-re.repo
yum clean all && yum makecache
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-20.10.6 -y
2.touch /etc/docker/daemon.json
"https://docker.mirrors.ustc.edu.cn/"
1.获取镜像 获取是从你配置好的docker镜像站中获取,去拉取镜像站(docker pull xxx "xxx 为镜像名称")
2.运行nginx镜像,运行出的具体容器中就跑着一个nginx服务 会返回容器的id
-p 80:80 端口映射 宿主机的端口映射到docker中的端口
例如:docker pull centos:7.8.2003
docker有个镜像托管仓库,默认的docker仓库是 dockerhub,有大量的优质的镜像,以及用户自己上传的镜像
docker search 镜像名:tag tag就是具体的版本
docker images ls(可选) 查看本地的镜像文件
ls /var/lib/docker/image/overlay2/imagedb/content/sha256/ -l
docker run -it --rm centos bash
(这里进入的是centos的镜像,如果要运行其他镜像,就输入其他的镜像名称)
docker images --format "{{.ID}}" 只显示id
docker rmi 'docker images -aq'
docker image save 镜像名:版本号 > /存放的目录.tgz
例如:docker image save centos:7.8.2003 > /opt/centos7.8.2003.tgz
docker image load - i 要导入的文件所在的路径
docker exec -it 容器id bash或者sh : 进入到正在运行的容器空间内
制作镜像操作指令 RUN yum install openssh-server -y
需求,通过dockerfile,构建nginx镜像,且运行容器后,生成的页面是 xxx
RUN echo '<meta charset=utf8>xxx' > /usr/share/nginx/html/index.html
docker tag 要修改的镜像id 新的镜像名(默认为none)
docker run -d -p 80:80 my_nginx
例如:copy chaoge* 宿主机文件路径 镜像文件路径
用法与copy一样,区别是add有自解压功能,支持获取远程文件(URL),且权限默认为600
语法:CMD ["参数1","参数2"] 【逗号相当于命令之间的空格】 必须是双引号
例如:CMD["/bin/bash"] 该镜像在运行容器实力的时候,执行的具体参数是什么
CMD systemctl start nginx 所以这种写法是错误的
正确的应该是 :CMD ["nginx","-g","daemon off;"]
当指定了ENTRYPOINT之后,CMD指令的语义就发生了变化
RUN rpm --rebuliddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
CMD ["curl","-s","http://ipinfo.io/ip"]
注意:CMD ["curl","-s","http://ipinfo.io/ip"] 等同于 docker run 镜像名 curl -s http://ipinfo.io/ip
这个命令是无法直接传入参数的,该形式是覆盖镜像中的cmd,所以会报错
想要正确的给容器传入 -I 参数 就要重新传入一个完整的命令,但是这个操作意义不大,因为太复杂了
RUN rpm --rebuliddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
ENITYPOINY ["curl","-s","http://ipinfo.io/ip"]
容器在运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐的是挂载,写入到宿主机上,进行维护
VOLUME /data #将容器内的/data文件夹,在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证容器存储层无状态理念
通过docker run -v 参数 ,直接色湖之需要映射的挂载目录
docker run -P 作用是随机宿主机端口:容器内端口
RUN curl -O /etc/yum.repos.d/CentOs-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo;
RUN curl -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo;
RUN yum install python-devel python3-pip -y
RUN pip3 install -i https://pypi.douban.com/simple flask
docker bulid --no-cache -t "起个名字" .# 'yuchao163/my_flask_web'