前期准备:
- 关闭selinux
- 查看状态
getenforce
临时关闭
setenforce 0
永久关闭
vi /etc/selinux/config
# 设置为disabled
SELINUX=disabled
防火墙
- 查看防火墙状态
systemctl status firewalld
关闭
systemctl stop firewalld
关闭开机启动防火墙
systemctl disable firewalld
配置repo源:
curl -o /etc/yum.repos.d/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo
yum clean all && yum makecache
yum install -y docker-ce-23.0.6
设置开机启动
systemctl enable docker
启动docker
systemctl start docker
systemctl restart docker
停止docker
systemctl stop docker
其他
## 查看docker信息
docker version
## 查看docker信息
docker info
## docker-client
which docker
## docker daemon
ps -ef |grep docker
配置镜像加速
类似于pip源,以后在docker中下载镜像时,使用加速器,下载就会比较快。可以去这:https:///cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
}
EOF
systemctl daemon-reload
systemctl restart docker
docker pull ubuntu
下载相当快:
转发:
直接黏贴:
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.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/docker.conf
dockerfile:
FROM 指定基础镜像,必须为第一个命令
格式:
FROM <image>
FROM <image>:<tag>
示例:
FROM mysql:5.7
注意:
tag是可选的,如果不使用tag时,会使用latest版本的基础镜像
MAINTAINER 镜像维护者的信息
格式:
MAINTAINER <name>
示例:
MAINTAINER char1es
MAINTAINER char1es@
ENV
格式:
ENV <key> <value>
ENV <key>=<value>
示例:
ENV myName John
ENV myCat=fluffy
COPY|ADD 添加本地文件到镜像中 app.py /data/www/info/app.py
格式:
COPY <src>... <dest>
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD test relativeDir/ # 添加 "test" 到 $WORKDIR/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
注意:针对压缩包使用ADD的话,会自动解压。
WORKDIR 工作目录
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
注意:
通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行
RUN 构建镜像过程中执行命令
格式:
RUN <command>
示例:
RUN yum install nginx
RUN pip install django
RUN mkdir test && rm -rf /var/lib/unusedfiles
注意:
RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
CMD 构建容器后调用,也就是在容器启动时才进行调用
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD ["/usr/bin/wc","--help"]
CMD ping
注意:
CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
ENTRYPOINT 设置容器初始化命令,使其可执行化
格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
ENTRYPOINT ["/usr/bin/wc","--help"]
注意:
ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令
EXPOSE 暴漏端口
格式:
EXPOSE <port> [<port>...]
示例:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp
注意:
就是一个端口的标识,实际开发时,没什么意义。因为端口的映射会在run命令时进行指定。
构建:
docker build -t char1es/web1:1.0 . -f Dockerfile