【Docker 入门】

概要

docker:这是一个由德克萨斯大学的奥斯汀分校维护的docker snap版。snap是一种跨多种Linux发行版的新型软件打包格式,方便更新和隔离,docker就是基于这个格式的Docker社区版的封装。然而,它可能并不包含所有的Docker特性,并且可能存在一些配置差异,例如网络配置等。

podman-docker:Podman是一种无需daemon(即守护进程)环境就可以运行的下一代Linux容器工具。它的使用感觉就像Docker,但实际上并没有运行在后台的守护进程。除此以外,它的命令行调用和docker是向后兼容的,可以很容易转换过来。

docker.io:这个是Ubuntu官方维护的docker版本,存在于Ubuntu的官方库中,使用 sudo apt install docker.io 命令可以方便简洁地获取。但是,由于它往往落后于最新版Docker,可能缺少最新的一些功能。

docker-ce:这是Docker社区版(Community Edition)。含有了Docker引擎用于创建和管理Docker镜像和容器,以及 Docker 命令行界面 (CLI) 客户端。适合在笔记本、桌面和开发团队使用,提供频繁的更新和新特性。

一、安装Docker CE

wsl上面不能用这个方式安装,它不支持docker守护进程,请参考这个文章:

wsl安装docker-ce

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo docker run hello-world

1.1.配置阿里云镜像加速【可选】

/etc/docker/daemon.json,不存在就创建这个文件

{
  "registry-mirrors": ["https://你的专属加速器地址.mirror.aliyuncs.com"]
}

1.2.重启

sudo systemctl daemon-reload
sudo systemctl restart docker

二、Docker版本选择

推荐docker-ce,功能多一些

三、Docker指令

1.Docker命令

1.1.run

# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。  
docker run --name mynginx -d nginx:latest  
# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。  
docker run -p 80:80 -v /data:/data -d nginx:latest  
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。  
docker run -it nginx:latest /bin/bash  

1.2.start/stop/restart

# 启动已被停止的容器mynginx  
docker start mynginx  
# 停止运行中的容器mynginx  
docker stop mynginx  
# 重启容器mynginx  
docker restart mynginx  

1.3.kill

# 根据容器名字杀掉容器  
docker kill tomcat7  
# 根据容器ID杀掉容器  
docker kill 65d4a94f7a39

1.4.rm

# 强制删除容器 db01、db02:  
docker rm -f db01 db02  

# 删除容器 nginx01, 并删除容器挂载的数据卷:  
docker rm -v nginx01  

# 删除所有已经停止的容器:  
docker rm $(docker ps -a -q)

1.5.create

# 使用docker镜像nginx:latest创建一个容器,并将容器命名为mynginx 不启动它 
docker create --name mynginx nginx:latest     

1.6.ps

# 列出所有在运行的容器信息。  
docker ps  

# 列出最近创建的5个容器信息。  
docker ps -n 5  

# 列出所有创建的容器ID。  
docker ps -a -q 

1.7.exec

-d 后台运行

# 在容器 mynginx 中以交互模式执行容器内 /root/nginx.sh 脚本  
docker exec -it mynginx /bin/sh /root/nginx.sh  

# 在容器 mynginx 中开启一个交互模式的终端  
docker exec -i -t  mynginx /bin/bash  

# 也可以通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器。  
docker ps -a   
docker exec -it 9df70f9a0714 /bin/bash

1.8.top

# 查看容器mymysql的进程信息。  
docker top mymysql  

# 查看所有运行容器的进程信息。  
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done  

1.9.port

# 查看容器mynginx的端口映射情况。  
docker port mymysql  

2.Dockerfile关键字

关键字用法示例
FROM指定基础镜像,用于后续的指令构建。FROM ubuntu:latest
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。RUN apt-get update
CMD指定容器创建时的默认命令(只能存在1条)。CMD [“ll”,“-h”]
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。ENV PATH=/app:$PATH
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。COPY abc /app
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。WORKDIR /app
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 “docker build” 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
# 基于空白镜像
FROM scratch
# 先把系统的文件拷贝到Dockerfile所在目录,因为COPY命令是以当前路径为根目录,拷贝可执行文件和库
COPY /bin/echo /bin/echo
# 拷贝可执行文件依赖库,通过执行 ldd /bin/echo 查看依赖
COPY /lib64/libc.so.6 /lib64/libc.so.6
COPY /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
# 设置当前工作目录
WORKDIR /
# 容器创建时执行指令
CMD ["/bin/echo", "hello docker"]

3.镜像打包

name:tag tag可以不要

# docker build -t name:tag Dockerfile目录
docker build -t mynginx:1.0 .

4.镜像运行

docker run -it mynginx:1.0

5.镜像导入导出

# 导出
docker save -o mynginx.tar mynginx:1.0
# 导入
docker load --input mynginx.tar

6.镜像查看

docker images [-a]
# 列出本地镜像中REPOSITORY为ubuntu的镜像列表
docker images ubuntu

四、创建Ubuntu Docker镜像

#最新版本的ubuntu
FROM ubuntu:latest
#FROM ubuntu:20.04
# 这里是试着在docker内部安装python,最后一步是清空apt缓存减小镜像体积
RUN apt-get update && \
	apt-get install -y python3 \
    apt-get install -y lsb-release && \
    rm -rf /var/lib/apt/lists/*
# 执行python程序,Dockerfile只能执行一条CMD
# CMD ["python3"]
CMD ["lsb_release", "-a"]

五、创建空白的Docker镜像

FROM scratch
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值