docker常用命令

1. docker 常用命令

1.1 启动停止

systemctl start docker 	# 启动docker服务
systemctl stop docker 	# 关闭docker服务
systemctl enable docker # 设置开机自启动
docker version 			# 查看docker 版本

1.2 配置aliyun容器镜像加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1fc43mcq.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

1.3 镜像操作

命令说明
docker search 关键字在镜像仓库中搜索包含关键字的镜像
docker pull 镜像名称:tagtag为镜像版本,如果不指定,默认为latest
docker images查看本地镜像
docker inspect 镜像id or 镜像名称查看镜像详细信息
docker rmi -f 镜像id or 镜像名:tag-f 为强制删除

搜索镜像
docker search
拉取镜像
docker pull
查看本地镜像
docker images
查看镜像底层信息
docker inspect
docker inspect

1.4 容器相关

命令说明
docker run --name 容器名称 -i -t -d -p 宿主机端口:容器端口 -v 宿主机目录:容器目录:ro 镜像id or 镜像名:tag创建镜像 , --name:指定容器名称,-i:交互模式访问 -t:分配一个伪终端,-p:端口映射,-v:目录映射 ro为只读,默认为读写
docker ps -a -q-a:表示 查看所有容器,默认显示正在运行的容器,-q:只显示容器id
docker stop 容器id或容器名称停止容器
docker start 容器id或容器名称启动容器
docker rm -f 容器id或容器名称删除容器 -f 表示强制删除
docker logs 容器id或容器名称查看容器日志
docker inspect 容器id或容器名称查看容器详细信息
docker exec -it 容器id或容器名 bash以交互式进入容器
docker cp 宿主机目录 容器id:容器目录拷贝宿主机文件到容器内
docker cp 容器id:容器目录 宿主机目录拷贝容器文件到宿主机

创建镜像

docker run --name conner_centos -i -t -d -p 1234:2234 -v /tmp:/tmp:ro 688353a31fde

在这里插入图片描述
拷贝宿主机文件到容器

docker cp lbz 1b8ecd002608:/root

docker cp
拷贝容器文件到宿主机

docker cp 1b8ecd002608:/root/lbz/connor /tmp

docker cp
清除所有容器

# 方法一
for i in `docker ps -a|awk '{print $1}'|grep -v CONTAINER`; do docker rm -f $i; done;
# 方法二
docker rm -f $(docker ps -aq)

2. 构建镜像

2.1 修改容器,通过容器构建镜像

根据基础镜像创建容器
docker run -it -d
修改容器
docker exec
提交新镜像

# docker commit -m='描述信息' -a='作者' 容器id或容器名称 镜像名:tag
docker commit -m='test2020' -a='connor' 2d96a1f2d3e8 centos7:v1.0

docker commit
docker run -it -d

2.2 编写dockerfile构建镜像

语法规则

  • 指令必须大写,且后面必须跟参数
  • 第一条指令必须为FROM,指定Base Image(基础镜像)
  • 指令顺序按从上到下依次执行
  • 每条指令都会创建一个新的镜像层并提交

2.2.1 dockerfile常用参数

参数说明
FROM指定Base Image
MAINTAINER指定作者
ENV设置环境变量
WORKDIR指定默认工作目录,即进入容器后默认进入的目录
VOLUME创建容器内部挂载点
RUN指定构建过程中需要执行的命令
CMD指定容器运行时需要执行的命令,有多条命令时只有最后一条生效
ENTRYPOINT指定容器运行时需要执行的命令
COPY拷贝文件或目录到镜像中
ADD拷贝文件到镜像中
EXPOSE指定容器暴露端口

2.2.2 构建镜像

创建dockerfile

# 指定基础镜像
FROM accab2322a74
# 指定作者
MAINTAINER connor
# 添加环境变量
ENV test_path /usr/local/ansible
# 构建过程中执行命令
RUN mkdir -p ${test_path}
# 拷贝文件或目录
COPY a.txt ${test_path}
# 拷贝文件
ADD 1.txt ${test_path}
# 指定默认工作目录
WORKDIR ${test_path}
# 添加默认挂载点,在docker run 时如果不指定-v 则默认挂载到随机目录
VOLUME ["/data1","/data2"]
# 启动容器时运行,如果docker run后面添加了参数则会在ENTRYPOINT参数中追加
ENTRYPOINT ["tail"]
# 启动容器时运行,默认追加命令(参数),如果有多个CMD命令,只执行(添加)最后一条命令(参数),如果docker run后面添加了参数则会将 CMD中的参数覆盖
CMD ["-f", "/usr/local/ansible/1.txt"]
# 声明了容器应该打开的端口并没有实际上将它打开,在不使用-p(指定宿主机端口映射)和-P(宿主机随机端口映射)时该端口并不会打开
# 作用1:为了让运维人员知晓,需要映射哪些端口 作用2:使用随机端口映射时,容器默认使用EXPOSE暴露端口
EXPOSE 8080

根据dockerfile构建新的镜像

# docker build -f dockerfile文件名 -t 镜像:标签 .(注意这里还有个点)
docker build -f test_dockerfile -t centos7:v1.7 .

docker build -f test_dockerfile -t centos7:v1.7 .
运行容器

# -P 指定随机端口映射,[-f /usr/local/ansible/a.txt] 为启动参数,默认会将dockerfile中的CMD参数覆盖,但不会覆盖ENTRYPOINT,会与ENTRYPOINT参数组合成新的命令,当没有ENTRYPOINT时,则为独立运行的命令
docker run  -it -d  -P centos7:v1.7 -f /usr/local/ansible/a.txt

此处可以看到容器端口8080已经对外开放
docker run
此处可以看到dockerfile 的CMD的值已经被替换

docker inspect -f {{".Config.Cmd"}} eab086bf2f8c

docker inspect
此处可以查看容器挂载宿主机的具体目录

docker inspect -f {{".Mounts"}} eab086bf2f8c

docker inspect
此处可以验证得出容器挂载宿主机成功
在这里插入图片描述

3. 其他问题

3.1 docker -v 挂载宿主机目录没有权限访问

两种方法选择一种即可

3.1.1 关闭selinux

# 修改配置文件需要重启服务器才能生效,所以修改配置后还需要使用命令临时修改
sed  -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

3.1.2 给需要挂载的宿主机目录配置安全上下文(selinux 标签)

# /data为宿主机提供挂载的目录
chcon -Rt svirt_sandbox_file_t /data/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值