当前位置:首页 > 小知识 > 正文内容

Docker基础使用

雨源1个月前 (03-28)小知识19

安装

机器环境初始化

wget -O /etc/yum.repos.d/CentOs-Base.repo http://mirrors.aliyun.com/repo/

Centos-7.repo

 

 

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel.repo

 

清空一下本地的缓存

yum clean all

生成新的缓存

yum makecache

 

清空一下现有的规则

iptables -F

 

确保docke状态为 Disabled

getenforce

 

 

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

 

禁止开机自启

systemctl disable firewalld

 

停止防火墙服务

systemctl stop firewalld

 

安装docker

开启linux内核的流量转发

 

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

net.ipv4.ip_forward=1

EOF

 

重新加载内核参数

如果报错,则执行: 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缓存

yum clean all && yum makecache

[docker-ce-stable]

name=Docker CE Stable - $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable

enabled=1

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-stable-debuginfo]

name=Docker CE Stable - Debuginfo $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-stable-source]

name=Docker CE Stable - Sources

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-test]

name=Docker CE Test - $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-test-debuginfo]

name=Docker CE Test - Debuginfo $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-test-source]

name=Docker CE Test - Sources

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-nightly]

name=Docker CE Nightly - $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-nightly-debuginfo]

name=Docker CE Nightly - Debuginfo $basearch

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

[docker-ce-nightly-source]

name=Docker CE Nightly - Sources

baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly

enabled=0

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

 

 

 

 

(可选)查看源中可用版本

yum list docker-ce --showduplicates | sort -r

 

直接yum安装docker

yum install  docker-ce-20.10.6 -y

 

配置docker加速器,加速下载docker

1.mkdir -p /etc/docker

2.touch /etc/docker/daemon.json

3.vim /etc/docker/daemon.json

4.写入

{

"registry-mirrors" : [

"https://docker.mirrors.ustc.edu.cn/"

]

}

 

 

尝试启动docker

1.systemctl daemon-reload

2.设置开机自启

systemctl enable docker

 

3.启动

systemctl restart docker

如果启动失败:

mv daemon.json daemon.conf

 

 

 

4.验证docker是否启动 查看端口号是否开启

ps -ef | grep docker

 

5.查看docker版本

docker version

 

 

(可选)卸载docker

yum remove -y docker-xxx

(xxx代表的是docker的版本号)

 

 

启动第一个docker容器 nginx 服务

搜索nginx镜像文件

docker search nginx

 

查看本地docker镜像文件有哪些

docker image ls

 

(可选)删除镜像文件

docker rmi 镜像文件的id

 

1.获取镜像 获取是从你配置好的docker镜像站中获取,去拉取镜像站(docker pull xxx "xxx 为镜像名称"

(可选)docker pull nginx:版本号

docker pull nginx

 

2.运行nginx镜像,运行出的具体容器中就跑着一个nginx服务 会返回容器的id

docker run -d -p 80:80 nginx

-d 后台运行服务器

-p 80:80 端口映射 宿主机的端口映射到docker中的端口

--rm 启动容器自动删除记录

--name 给容器起个名字

-P 随机端口映射

 

(可选)3.查看容器是否再运行

docker ps

此时可用访问宿主机的80端口,查看容器内的80端口应用

会显示 Welcome to nginx!

 

 

(可选)查看开放的端口

netstat -tunlp

 

可以尝试停止容器,查看结果

docker stop 容器的id

 

 

 

docker在宿主机中运行不同的操作系统,

解决团队中使用不同的操作系统带来的问题

docker pull 不同的操作系统

例如:docker pull centos:7.8.2003

运行该操作系统

docker run -it 镜像的id bash

查看当前所使用的镜像文件及版本号

cat /ect/redhat-release

 

退出当前运行的镜像文件

exit

 

获取镜像

docker有个镜像托管仓库,默认的docker仓库是 dockerhub,有大量的优质的镜像,以及用户自己上传的镜像

docker search 镜像名:tag  tag就是具体的版本

docker images ls(可选) 查看本地的镜像文件

docker pull 镜像名  下载镜像源

 

查看docker存储所在的路径

docker info

docker info grep | Root

存放docker的镜像目录

ls /var/lib/docker/image/overlay2/imagedb/content/sha256/ -l

 

使用不同的镜像生成容器

docker run -it --rm centos bash

(这里进入的是centos的镜像,如果要运行其他镜像,就输入其他的镜像名称)

-it 开启一个交互式的终端

--rm 容器退出时删除该容器

 

查看镜像

docker images 查看本地的镜像

(可选)docker images 镜像名:tag

只列出镜像的id

docker images -q

格式化显示镜像

docker images --format "{{.ID}}"  只显示id

 

docker images -a

 

删除镜像

删除容器记录:docker rm 镜像id

docker rmi 镜像名或者id

 

 

批量删除镜像

docker rmi 'docker images -aq'

批量删除容器

docker rm 'docker ps -aq'

导出镜像

docker image save 镜像名:版本号 > /存放的目录.tgz

例如:docker image save centos:7.8.2003 > /opt/centos7.8.2003.tgz

 

导入镜像

docker image load - i 要导入的文件所在的路径

 

docker logs -f 容器id 查看容器日志

 

docker exec -it 容器id bash或者sh : 进入到正在运行的容器空间内

 

docker port 容器id:查看容器转发情况

 

容器的提交

先进入到容器中

docker commit 容器id 新的镜像名

 

运行提交的容器

docker run -it 容器的名称 bash

 

dockerfile的使用

指定基础镜像信息 FROM  镜像名字

制作镜像操作指令 RUN yum install openssh-server -y

容器启动时执行的命令 CMD ["/bin/bash"]

 

 

image.png 

 

快速入门dockerfile

 

需求,通过dockerfile,构建nginx镜像,且运行容器后,生成的页面是 xxx

 

1.创建dockerfile,注意文件名,必须是这个

然后编辑 vim docker

 

FROm nginx

RUN echo '<meta charset=utf8>xxx' > /usr/share/nginx/html/index.html

 

2.构建dockerfile

docker build .

 

3.修改镜像名

docker tag 要修改的镜像id 新的镜像名(默认为none

 

4.运行该镜像

docker run -d -p 80:80 my_nginx

 

5.查看宿主机的80端口

 

COPY

从宿主机复制文件目录到新的一层镜像内

copy 宿主机文件路径 镜像文件路径

支持多个文件,以通配符的形式复制

例如:copy chaoge* 宿主机文件路径 镜像文件路径

 

ADD

用法与copy一样,区别是add有自解压功能,支持获取远程文件(URL),且权限默认为600

例如:ADD chaoge.tgz /home

 

CMD

cmd在容器内运行某个命令,启动程序

语法:CMD ["参数1","参数2"]  逗号相当于命令之间的空格】  必须是双引号

例如:CMD["/bin/bash"] 该镜像在运行容器实力的时候,执行的具体参数是什么

 docker run -it centos CMD语法】

容器内的程序必须在前台运行

CMD systemctl start nginx 所以这种写法是错误的

 

正确的应该是 CMD ["nginx","-g","daemon off;"]

 

ENTRYPOINT

作用与cmd一样,都是指定容器启动程序的启动参数

当指定了ENTRYPOINT之后,CMD指令的语义就发生了变化

而是把CMD的内容当作参数传递给ENTRYPOINT 指令

 

 

1.准备一个docker镜像

FROM centos:7.8.2003

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

 

2.构建dockerfile

docker bulid .

 

3.查看结果是否构建成功

显示:Successfully bulit id

 

4.检查镜像

docker tag id 新的镜像名

docker images | grep curl

 

5.运行镜像,生成容器记录,没有前台运行,因此会立即挂了

docker run 镜像名

这个命令是无法直接传入参数的,该形式是覆盖镜像中的cmd,所以会报错

 

想要正确的给容器传入 -I 参数 就要重新传入一个完整的命令,但是这个操作意义不大,因为太复杂了

 

6.正确的就是使用ENITPOINT

FROM centos:7.8.2003

RUN rpm --rebuliddb && yum install epel-release -y

RUN rpm --rebuilddb && yum install curl -y

ENITYPOINY ["curl","-s","http://ipinfo.io/ip"]

 

7.重新构建镜像 docker bulid .

8.重新运行该镜像,看结果,以及传入新的参数

此时再传入参数就不会报错

docker run 镜像名称 -I

 

 

ENV

设置环境变量

ENV NAME="yuchao"

ENY AGE = "18"

ENV MYSQL_VERSION=5.6

后续所有的参数,通过&NAME就可以直接获取变量值

 

ARG

作用和ENV一样

区别:

ENV 无论再镜像构建时,还是容器中运行,该变量都可以使用

ARG只是用于构建镜像需要设置的变量,容器运行时就消失了

 

 

VOLUME

容器在运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐的是挂载,写入到宿主机上,进行维护

 

VOLUME /data #将容器内的/data文件夹,在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证容器存储层无状态理念

 

尝试创建一个  dockerfile1

FROM centos

MAINTAINER chage

VOLUME ["/data1","/data2"]

该容器运行的时候,这两个目录自动和宿主机的目录做好映射关系

docker bulid .

 

docker inspect id  查看容器详细信息

其中source是宿主中的挂载的目录

 

通过docker run -v 参数 ,直接色湖之需要映射的挂载目录

 

EXPOSE

指定容器运行时对外提供的端口服务

帮助使用该镜像的人,快速理解该容器的一个端口业务

docker port 容器

docker run -p 宿主机端口:容器端口

docker run -P 作用是随机宿主机端口:容器内端口

 

WORKDIR

用于dockerfile中,目录的切换,更改工作目录

WORKDIR /opt(目录路径)

 

USER

用于改变环境,用于切换用户

USER root

用哪个用户执行后续的指令操作

 

 

构建一个网站的镜像

1.在宿主机下,准备一个目录,准备好dockerfile

2.准备好项目代码

3.编写dockerfile

创建Dockerfile文件

mkdir Dockerfile

 

vim Dockerfile

FROM centos:7.8.2003

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 makecache fast;

RUN yum install python-devel python3-pip -y

RUN pip3 install -i https://pypi.douban.com/simple flask

COPY 代码文件.py /容器的路径(/opt)

WORKDIR 容器的路径(/opt)

EXPOSE 8080

CMD ["python3","代码文件.py"]

 

4.构建镜像

docker bulid --no-cache -t "起个名字" .# 'yuchao163/my_flask_web'

 --no-cache:重新构建,不使用缓存

 

5.运行镜像,生成容器

docker run -d --name 起个容器名字-p 90:8080 镜像名字  #my_flask_web_1

 

6.访问宿主机网站

 

7.修改网站的内容,这个程序是跑在容器里

 修改宿主机的代码,重新构建dockerfile

 进入已经运行的容器内,修改代码,重启容器

 

1.docker exec -it 容器id bash

2.进入到容器内所存储的项目文件路径

3.vi 把容器内项目的代码进行修改

4.重启容器 docker restart 容器id

5.docker ps 查看容器是否正常存活


扫描二维码推送至手机访问。

版权声明:本文由雨源发布,如需转载请注明出处。

本文链接:http://www.yfwork.xyz/?id=13

分享给朋友:
返回列表

上一篇:cmd基本命令

下一篇:CTF入门

“Docker基础使用” 的相关文章

Jetbrains 2024激活

Jetbrains 2024激活

jetbrains 2024版全家桶激活插件激活码-Win系统.zip...

电子设计常用软件安装教程

外部链接https://docs.qq.com/doc/DS2N3ZmZxUndybVlF 本站网盘资源分享名称:电子设计安装软件分享链接:http://kod.yfwork.xyz/#s/_cxqamAQ访问密码:P6Lvb...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。