docker使用总结

下载安装

在线

1.设置yum镜像源

#备份原配置文件

#如果没有wget,先下载

yum install -y wget

#查看yum源信息

yum repolist

#安装base reop源

cd /etc/yum.repos.d

#接着备份旧的配置文件  

mv -f /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

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

#清理缓存

yum clean all

#重新生成缓存

yum makecache

#再次查看yum源信息

yum repolist

# 更新镜像配置,可以看到阿里镜像源

 yum -y update

2.使用yum安装

yum install -y docker

3.查看是否安装成功

yum list installed | grep docker

4.启动服务

systemctl start docker

5.加入开机启动

systemctl enable docker

6.检查启动是否成功

systemctl status docker

如果启动报错,出现类似于selinux不支持的错误,则需要关闭selinux

CentOS 7.X 关闭SELinux - 技术备忘录

离线

1.下载docker二进制文件

https://download.docker.com/linux/static/stable/x86_64/ 

https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/  

2.解压安装

#建立存放文件夹

mkdir mydocker

cd mydocker/

#上传文件到文件夹

3.解压

tar xzvf docker-你下载的版本.tgz

4.复制二进制文件

cp docker/* /usr/bin/

5.建立docker.service

vi /usr/lib/systemd/system/docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

[Service]

Environment=“PATH=/usr/bin:/bin:/sbin:/usr/bin:/usr/sbin”

EnvironmentFile=-/run/flannel/docker

ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --log-level=error $DOCKER_NETWORK_OPTIONS

ExecReload=/bin/kill -s HUP $MAINPID

Restart=on-failure

RestartSec=5

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

Delegate=yes

KillMode=process

[Install]

WantedBy=multi-user.target

6.给docker.service权限

chmod +x /usr/lib/systemd/system/docker.service

7.加载配置

[systemctl daemon-reload

8.启动

systemctl start docker.service

9.设置开机自启动

systemctl enable docker

10.查看状态

systemctl status docker

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是阿里的镜像地址:

在/etc/docker/daemon.json文件中添加如下内容.

{

"registry-mirrors": ["https://wghlmi3i.mirror.aliyuncs.com"]

}

或者如下地址

{

 "registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]

}

如果报错类似如下,则需要时钟同步

Error response from daemon: Get "https://index.docker.io/v1/search?q=ngix&n=25": x509: certificate has expired or is not yet valid: current time 2023-04-20T14:05:12-04:00 is before 2023-05-05T00:00:00Z

解决方案:

date -s "2023-05-22 23:09:00"

clock -w

常用命令

镜像操作


获取镜像: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
# 拉取镜像
docker pull ngix
# 删除镜像
docker rmi ngix
# 在远程仓库搜索镜像
docker search ngix
# 列出本地images
docker images
# 基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
docker commit -a="DeepInThought" -m="my redis" [redis容器ID]  myredis:v1.1

镜像搜索

1.docker search 搜索内容

如果search出来的镜像,不是自己想要的版本,可通过在docker hub上搜索好版本TAG

地址如下:https://hub.docker.com/

2.进入之后,在页面左上角搜索框搜索

3.进入满足条件的搜索结果

4.点击Tags

 5.选中满足条件的Tags,点击进入

6. 图示处就是需要复制的内容

7.拉取镜像

docker pull mysql:debian

 镜像信息查看

通过 docker inspect 命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。

docker inspect docker.io/mysql:5.7

通过 docker history 命令,可以列出各个层(layer)的创建信息,如我们查看 docker.io/mysql:5.7 的各层信息:

docker history docker.io/mysql:5.7


可以看到,上面过长的信息,为了方便展示,后面都省略了,如果您想要看具体信息,可以通过添加 --no-trunc 选项,如下面命令:

docker history --no-trunc docker.io/mysql:5.7

镜像打包

1.构建dockerfile

样例

open-jdk环境

#依赖基础镜像
FROM openjdk:8
MAINTAINER HUI
LABEL app="myApp" version="0.0.1" by="hui"
COPY ./pay_news_spider /opt/
WORKDIR /opt
ENTRYPOINT ["java","-jar","/opt/pay_news_spider/pay_news_spider.jar"]

自定义java环境

FROM centos:7
USER root
MAINTAINER HUI
LABEL app="paynewsyn" version="2" by="hui"
COPY ./pay_news_spider /opt/
COPY ./pay_news_spider/conf/busi.conf /tmp/conf/
WORKDIR /opt
#ADD 是相对路径jar,把java添加到容器中
ADD jdk1.8.0_112.tar.gz /opt/java/
#配置java环境变量
ENV JAVA_HOME /opt/java/jdk1.8.0_112
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

#设置系统编码
RUN yum install kde-l10n-Chinese -y
RUN yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#RUN export LANG=zh_CN.UTF-8
#RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
#ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

chrome环境

FROM selenium/standalone-chrome:latest
USER root
MAINTAINER HUI
LABEL app="myApp" version="0.0.1" by="hui"
COPY ./pay_news_spider /opt/
COPY ./pay_news_spider/conf/busi.conf /tmp/conf/
WORKDIR /opt
#ADD 是相对路径jar,把java添加到容器中
ADD jdk1.8.0_112.tar.gz /opt/java/
#配置java环境变量
ENV JAVA_HOME /opt/java/jdk1.8.0_112
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
ENTRYPOINT ["java","-jar","/opt/pay_news_spider.jar"]

2.build

docker build -t paynewsyn:5 .

容器操作


启动容器


启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。

docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]


# 运行一个容器,打印Hello world后退出
docker run alpine /bin/echo 'Hello world'
# 创建一个交互容器 退出当前命令,容器也随之退出
docker run -it alpine
# 创建一个后台运行容器
docker run  -d --name demo1 alpine  sleep 10m


run命令常用参数:

-t  参数让Docker分配一个伪终端并绑定到容器的标准输入上
-i  参数则让容器的标准输入保持打开。
-c 参数用于给运行的容器分配cpu的shares值
-m 参数用于限制为容器的内存信息,以 B、K、M、G 为单位
-v 参数用于挂载一个volume,可以用多个-v参数同时挂载多个volume
-p 参数用于将容器的端口暴露给宿主机端口 格式:host_port:container_port 或者
host_ip:host_port:container_port
--name 容器名称
--net 容器使用的网络

-d:看做做守护线程(Daemon)

--restar=always:自动重启,比如服务器突然断电,重启服务器之后不需要你重新手动启动

#修改-name和 -p中宿主机的端口可以在同一机器启动多个服务

启动停止容器


docker stop demo1
docker start demo1
docker restart demo1

查看容器


# 查看正在运行的容器
docker ps
# 查看所有容 包括停止的容器
docker ps -a
# 查看容器详细信息
docker inspect demo1

容器进程


#top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
#列出redis容器中运行进程
docker top redis
#查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

容器日志


#查看redis容器日志,默认参数
docker logs redis
#查看redis容器日志,参数:-f  跟踪日志输出;-t   显示时间戳;--tail  仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
#查看容器redis从2020年06月01日后的最新10条日志。
docker logs --since="2020-06-01" --tail=10 redis

进入容器


docker exec -it demo1 /bin/sh


删除容器


# 删除一个已经停止运行的容器
docker rm demo1
# 强制删除正在运行的容器
docker rm -f dome1


停止容器


#停止一个运行中的容器
docker stop redis
#杀掉一个运行中的容器
docker kill redis

导入导出容器


# 将容器导出为镜像
docker export demo1 > demo1.tar
# 导入镜像
docker import demo1.tar xxx/demo

--------------------------------------------------------------------------------------------------------------------

#将指定镜像保存成 tar 归档文件

docker save -o mysql.tar docker.io/mysql:debian

docker load < mysql.tar

#如果load以后 显示tags为空,可以用docker tag 标记本地镜像,将其归入某一仓库。

docker tag ubuntu:15.10 runoob/ubuntu:v3

----------------------------------------------------------------------------------------------------------------------

#可以将容器的存储层保存下来成为镜像然后再导出

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

数据拷贝

docker cp :用于容器与主机之间的数据拷贝。


docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

docker-compose安装

#下载

wget --no-check-certificate https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-linux-x86_64

#移动到执行目录

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

#授权

chmod 777 /usr/local/bin/docker-compose

#验证

docker-compose -v

如何基于已有容器构造新的镜像?


对于一些比较复杂的docker环境,有的不是在docker build一步到位,是启动一个基础镜像以后,
通过 docker run -it demo /bin/bash 进入容器中把环境弄好。
或者是后续的迭代是在容器中更新的,另外一个新的程序需要用到这个环境。

实验测试:
1.基于一个docker中运行的python脚本测试

mkdir build_test1
cd build_test1

dockerfile文件

from docker.io/python
USER root
MAINTAINER HUI
LABEL app="myApp_extend" version="0.0.1" by="hui"
COPY ./test1.py /opt/
WORKDIR /opt
ENV arg1="dev"
ENV arg2="dev"
CMD ["/bin/sh", "-c", "python /opt/test1.py $arg1 $arg2"]

test1.py

# -*- coding: utf-8 -*-
import sys

if len(sys.argv) > 1:
    print("第一个输入参数为:", sys.argv[1])
else:
    print("没有输入参数!")


#打包

docker build -t my_app_test:1 .

#运行

docker run --rm --name py_test1 -e arg1=1111  -it my_app_test:1


2.保存为新的镜像

docker commit py_test1 my_app_test:2

3.模拟场景,我需要修改程序,修改启动的参数,重新构造镜像
test.py

# -*- coding: utf-8 -*-
import sys

if len(sys.argv) ==2:
    print("第一个输入参数为:", sys.argv[1])
    
elif len(sys.argv) == 3:
    print("第一个输入参数为:", sys.argv[1])
    print("第二个输入参数为:", sys.argv[2])
else:
    print("没有输入参数!")


#基于my_app_test:2构建容器
dockerfile 

from my_app_test:2
USER root
MAINTAINER HUI
LABEL app="myApp_extend" version="0.0.1" by="hui"
COPY ./test1.py /opt/
WORKDIR /opt
ENV arg1="dev"
ENV arg2="dev"
CMD ["/bin/sh", "-c", "python /opt/test1.py $arg1 $arg2"]


4.重新打包

docker build -t my_app_test:3 .

5.启动新的镜像

docker run   --name py_test3 -e arg1=1111 -e arg2=222  -it my_app_test:3

Docker容器启动时获取启动参数


方案1:推荐此方案


test.py

# -*- coding: utf-8 -*-
import sys

if len(sys.argv) ==2:
    print("第一个输入参数为:", sys.argv[1])
    
elif len(sys.argv) == 3:
    print("第一个输入参数为:", sys.argv[1])
    print("第二个输入参数为:", sys.argv[2])
else:
    print("没有输入参数!")

dockerfile 

from docker.io/python
USER root
MAINTAINER HUI
LABEL app="myApp_extend" version="0.0.1" by="hui"
COPY ./test1.py /opt/
WORKDIR /opt
ENV arg1="dev"
ENV arg2="dev"
CMD ["/bin/sh", "-c", "python /opt/test1.py $arg1 $arg2"]


#打包

docker build -t my_app_test:1 .

#启动

docker run   --name py_test -e arg1=1111 -e arg2=222  -it my_app_test:1

方案2

test.py

# -*- coding: utf-8 -*-
import sys
import os

arg1 = os.environ.get('arg1')
arg2 = os.environ.get('arg2')
print('第一个参数 arg1为====',arg1)
print('第一个参数 arg2为====',arg2)

dockerfile

from docker.io/python
USER root
MAINTAINER HUI
LABEL app="myApp_extend" version="0.0.1" by="hui"
COPY ./test1.py /opt/
WORKDIR /opt
ENV arg1="dev"
ENV arg2="dev"
ENTRYPOINT ["python","/opt/test1.py"]


#打包

docker build -t my_app_test:1 .

#启动

docker run   --name py_test -e arg1=1111 -e arg2=222  -it my_app_test:1

来源

docker离线安装

centos7 修改yum源为阿里源_ZZULI_星.夜的博客-CSDN博客_centos7 yum 阿里源

别再去找Docker常用命令了,你要的全都在这! - 知乎

Docker安装指定版本TAG的镜像

学习 Docker 如何查看镜像信息? - lclc - 博客园docker安装python3.8镜像-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值