docker学习笔记

Ubuntu安装docker

参考:ubuntu22.04使用阿里云Docker镜像源安装Docker(https://blog.csdn.net/qq_26328861/article/details/136205861)

  • 安装依赖包
    sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

  • 添加阿里云Docker镜像源GPG秘钥
    sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  • 添加阿里云镜像源
    sudo echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  • 安装Docker
    sudo apt install docker-ce docker-ce-cli containerd.io

  • 启动Docker服务
    sudo systemctl start docker

  • 查看Docker是否启动成功
    sudo systemctl status docker

  • 查看Docker的版本号,能打印则说明安装成功
    sudo docker -v

  • 运行第一个镜像,hello-world
    sudo docker run hello-world
    出现下面的报错,说明无法访问docker hub网站,需要配置国内的镜像,参考下一节。

Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

配置docker使用国内的镜像

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.m.daocloud.io",
    "https://docker.cloudlayer.icu"]
}
EOF

 sudo systemctl daemon-reload
 sudo systemctl restart docker

sudo docker run hello-world
出现下面的打印则表示运行成功

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete 
Digest: sha256:bfbb0cc14f13f9ed1ae86abc2b9f11181dc50d779807ed3a3c5e55a6936dbdd5
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

参考:解决目前Docker Hub国内无法访问方法汇总(https://www.cnblogs.com/ppqppl/articles/18499797)

镜像相关命令

docker serarch <ID> 	#搜索镜像
docker pull <ID>:<version>			#拉取镜像,如果不加冒号版本的话默认拉取最新的版本。
docker images			#查看镜像
docker rmi <ID>		#删除指定的镜像。
docker rmi `docker images -q`		#删除所有的镜像

容器相关命令

docker ps		#查看正在运行的容器
docker ps -a 	#查看所有容器
docker run 		#启动容器, -i 运行容器,-t 进入命令行,--name=xxxx 为创建的容器命名,-v 映射关系, -d 后台,-p 端口映射,/bin/bash 命令行模式运行。-e 添加环境变量
#docker run不加-d是以交互方式启动容器,即前台程序。退出后容器就停止工作了。
#docker run加-d是以守护进程的方式运行容器。
docker exec <容器名> -it /bin/bash也是以守护方式运行容器,退出命令行后依然在后台运行。
docker exec -it <容器名> /bin/bash		#进入到容器内部,也叫连接容器
docker stop <容器名/ID> 停止容器
docker start <容器名/ID> 启动容器
docker cp <宿主机文件路径> <容器名/ID>:<容器内部路径> #往容器内部拷贝文件
docker cp <容器名/ID>:<容器内部路径>  <宿主机文件路径> #从容器内部往宿主机拷贝文件
例如:docker cp /usr/root/hello.c 76c2xxxx:/usr/home/jimbo/hello.c
docker inspect <容器名>		#查看容器数据, --format='{{.NetworkSettings.IPAddress}}'查看指定信息
docker rm <容器名/ID>		#删除容器

备份与迁移

docker commit <容器名> <新的镜像名>		#容器保存为镜像,例如 docker hello-world myhello-world
docker save -o <新的镜像名.tar> <新的镜像名>		#将新的镜像打包
docker load -i <新的镜像名.tar>			#加载镜像包,docker images就可以看到新的镜像了。

通过Dockerfile来创建自己的镜像

  1. 编写Dockerfile文件
关键字说明
FROM指定所基于的基础镜像。
LABEL添加元数据标签给当前镜像。
RUN执行命令并对镜像进行修改。
COPY/ADD将本地文件复制到容器内;区别在于 ADD 支持更多功能如自动解压 tarball 文件。
ENV设置环境变量。
EXPOSE声明端口映射关系。
ENTRYPOINT/CMD设定容器启动时运行的程序及其参数.
cat Dockerfile

FROM centos:7
MAINTAINER jimbo
WORKDIR /usr
RUN mkdir /usr/jimbo
ADD hello-world.tar /usr/jimbo
ENV PATH $PATH:/usr/jimbo/hello-world

  1. 准备好需要被包含进镜像里的东西,文件或tar.gz压缩包。例如第一步中Dockerfile中指定的hello-world.tar
  2. 构建镜像
    docker bulid -t="myhello" .
    -t 指定目标镜像的名称,最后的点是指定在当前路径下搜索需要的文件。

参考资料

哔哩哔哩参考资料:https://www.bilibili.com/video/BV1hX4y137Y7?vd_source=3bb27c9c644381b3fcbbf1ff1e064d20&spm_id_from=333.788.player.switch&p=21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jimbo_Zhang

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值