docker容器的使用

1.首先明白两个个概念:容器docker,镜像image。

镜像我们可能已经熟悉,制作系统盘时,我们都会把系统制作成一个镜像,然后再放到U盘中制作成系统启动的U盘,这里我们则是把自己写好的代码制作成一个镜像,然后通过几步操作将这个镜像放在指定的容器中运行,在这个容器中,相关的配置都是为了该镜像能够运行,并且这些配置都是独立于我们的计算机的环境。

2. Docker hub

一个存放了诸多开源的镜像的资源网,我们可以轻松的下载下来直接在容器中运行。

网址:https://www.docker.com/products/docker-hub

3.docker中常用的命令可以参考这个博客 https://blog.csdn.net/Chenftli/article/details/91412352

可以通过在终端登陆自己的docker hub   命令为:

docker  login 用户名 -p 密码

可以在终端中查找docker hub中的镜像 命令:

docker search 镜像名字

查找到我们需要的镜像时 下载镜像  命令:

docker pull 镜像名

下载的镜像我在本地是无法查看源码的,如果需要修改源码,需要运行装载此镜像的docker,在此docker中查看,如我下载的autoware镜像可以在该容器中查看

如果我们需要将代码制作成镜像,我们可以在当前目录下创建一个镜像 命令 :

docker build --tag 镜像名字:版本  点

如果我们需要修改代码,并且再次生成一个镜像也可以用   命令(具体的参数可以参考一下链接)

docker build --tag 镜像名字:版本  点

https://www.runoob.com/docker/docker-build-command.html 

我们通过docker build 创建的镜像会储存在本地,启动一个docker,我们只要通过命令(具体的参数可以参考一下链接)

docker run --detach --name bb 镜像名:版本号

https://www.runoob.com/docker/docker-run-command.html 

其中--detach 表示该容器在后台运行, --name 给这个容器起一个别名,方便以后的操作。

当我们需要关闭一个容器时可以docker stop 容器名/别名

如果我们要把自己制作的镜像上传至docker hub ,首先登陆自己的docker hub 账号,点击Repositories, 再点击create ,给自己的镜像起一个dicker hub名字,点击create,再回到终端,指定需要上传的镜像和目标目录,命令:

docker tag bulletinboard:1.0 704252630/jctest:1.0

将生成的镜像传至docker hub  命令

docker push 704252630/jctest

2.docker 制作镜像

  • 编写DockerFile文件
  • docker build
  • docker run

DockerFile是用来构建Docker镜像的构建文件,由一系列的命令参数构成的脚本,它描述了怎么样为容器构建一个私有的文件系统,和怎么样基于镜像去运行一个容器。当吗命令行输入docker build 时会系统自动根据DockerFile文件去生成镜像。

写一个DockerFile文件是为一个镜像构建容器的第一步骤。DockerFile文件包含以下几项必要的内容

FROM:指定基础镜像
MAINTAINER:镜像维护者姓名及邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露的端口号
WORKDIR:指定在创建容器后,终端默认登录进来的工作目录
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像,ADD命令会自动处理URL和解压tar压缩包
COPY:拷贝文件、目录到镜像中。具体是将从构建上下文目录中<src原路径>的文件或目录复制到新一层镜像的<目标路径>位置 ,有两种写法:COPY src dest 或者 COPY ["src", "dest"]
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令
注意DockerFile中可以有多个CMD指令,但只有最后一个在启动时生效,CMD会被 docker run 之后的命令或参数覆盖
CMD指令的格式和RUN相似,也是两种格式:
shell格式:CMD <命令>
exec格式:CMD [“可执行文件”, “参数1”, “参数2” …]
参数列表格式:CMD [“参数1”, “参数2”, …],在指定了ENTRYPOINT 指令后,用CMD指定具体的参数。
ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样都是在指定容器启动程序及参数(下面通过实例2将他们的区别)。
ONBUILD:当构建一个被继承的DockerFile时运行命令, 父镜像在被子镜像继承后,父镜像的ONBUILD被触发。


官网案例:

# Use the official image as a parent image.
FROM node:current-slim

# Set the working directory.
WORKDIR /usr/src/app

# Copy the file from your host to your current location.
COPY package.json .

# Run the command inside your image filesystem.
RUN npm install

# Inform Docker that the container is listening on the specified port at runtime.
EXPOSE 8080

# Run the specified command within the container.
CMD [ "npm", "start" ]

# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .

autoware  DockerFile

ARG FROM_ARG
# hadolint ignore=DL3006
FROM ${FROM_ARG}
ARG ROS_DISTRO
ARG VERSION

ENV USERNAME autoware

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Build Autoware
RUN bash -c 'mkdir -p /home/$USERNAME/Autoware/src; \
    cd /home/$USERNAME/Autoware; \
    wget https://gitlab.com/autowarefoundation/autoware.ai/autoware/raw/$VERSION/autoware.ai.repos; \
    vcs import src < autoware.ai.repos; \
    source /opt/ros/$ROS_DISTRO/setup.bash; \
    colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release'

RUN echo "source /home/$USERNAME/Autoware/install/local_setup.bash" >> \
    /home/$USERNAME/.bashrc

COPY ./entrypoint.sh /tmp
ENTRYPOINT ["/tmp/entrypoint.sh"]

参考:

官网:https://docs.docker.com/get-started/part2/

博客:https://blog.csdn.net/Chenftli/article/details/91496365

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值