【Docker-03】Docker常用命令及操作

官方文档地址:docker | Docker Documentation

1. 常用命令列表及查看命令帮助

  • 命令列表
attach绑定并进入运行中容器的控制台(推出时可能会导致控制台退出)
build使用DockerFile构建镜像
commit提交容器变更为一个新的镜像
cp容器内部和本地文件系统间复制文件/文件夹
create使用镜像创建容器但不启动
diff检查容器里文件系统结构的更改【A:新增 D:删除 C:更改】
events获取事件
exec进入运行时的容器
export将容器导出为tar文件,方便传输
history查看景象历史
images列出所有镜像, 同 image ls
import

将export导出的tar文件导入为一个镜像,导入的镜像不能直接启动,需要使用export导出容器的启动参数启动

docker ps --no-trunc 看下之前的完整启动命令再用他 

/docker-entrypoint.sh nginx -g 'daemon ow ;'

info显示系统信息
inspect获取daocker镜像、容器、卷等的详细信息
kill杀死一个或者多个容器
load从 tar 文件加载镜像
loginDocker登录
logoutDocker登出
logs获取容器控制台日志
pause暂停一个或者多个容器
port列出容器的端口映射
ps列出所有容器
pull镜像仓库拉取景象
push推送镜像到镜像仓库
rename重命名一个容器
restart重启一个或者多个容器
rm移除一个或者多个容器
rmi移除一个或者多个镜像
run创建并启动容器
save把一个或者多个镜像保存为tar文件                            
search去docker hub寻找镜像
start启动一个或者多个容器
stats显示容器资源的实时使用状态
stop停止一个或者多个容器
tag给源镜像创建一个新的标签,变成新的镜像
top显示正在运行容器的进程
unpausepause的反操作
update更新一个或者多个docker容器配置
version打印docker版本
container更新一个或者多个docker容器配置
image镜像操作
network网络操作
volume存储卷管理
  • 查看命令帮助
docker <命令> --help

2. 镜像操作

  •  搜索镜像
#查看有哪些和nginx相关的镜像仓库
docker search nginx

https://hub.docker.com/  中搜索镜像仓库:

 

  •   镜像常规操作

        拉取镜像

#拉取镜像,不带冒号后tag,默认拉取lastest
docker pull nginx:latest

        查看本地镜像

#查看本地镜像
docker images
#也可使用
docker image ls


#查看镜像详细信息
docker image inspect mynginx:v1
#查看镜像历史
docker history mynginx:v1

        镜像打tag

#为本地镜像打tag,打出新的镜像
docker tag nginx mynginx:v1

         镜像save/load

#保存镜像到文件 -o指定保存的文件名 
docker save -o mynginx.tar mynginx:v1

#从save保存的镜像文件加载成镜像 -i 指定要load的文件
docker load -i mynginx.tar

         镜像删除

#删除本地游离镜像(无名镜像,多次commit会产生无名镜像)
docker image prune

#删除镜像 -f强制删除
docker image rm mynginx:v1
#也可以使用rmi 
docker rmi -f mynginx:v2

#删除所有镜像 -f强制删除
docker rmi -f $(docker images -aq)

        镜像import

#从容器export的文件导入镜像,0c64273374c3为容器ID
#docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令 
#(docker ps --no-trunc),
#然后再用下面启动。 docker run -d -P mynginx:v6 /docker-#entrypoint.sh nginx -g 'daemon off;'
docker import mynginx_export.tar mng2:v1

      镜像推送到远程仓库(这里也可以使用阿里云的镜像仓库)

#1 创建docker hub账户并登录
#2 创建一个镜像仓库
#3 docker login登录 通过 cat ~/.docker/config.json 查看是否登录
docker login -u <username> -p <password>
#4 打镜像tag 这里37739825/mynginx:v1为 仓库地址:tag
docker tag nginx 37739825/mynginx:v1
#5 推送镜像
docker push 37739825/mynginx
#6 docker logout退出登录
docker logout

  构建镜像(这里先使用简单的dockerFile,在dockerFile编写章节详细说明)

        1. 创建dockerFile        

# 创建dockerFile
vi dockerFile

#在dockerFile中粘贴以下内容
FROM busybox
CMD ping baidu.com

        2. 执行build指令 -t:指定镜像名:tag  -f:指定dockerFile,最后.表示使用当前路径为上下文路径    

# docker build构建镜像
docker build -t myimg:v1 -f dockerFile .

2. 容器操作

        容器创建与启动

#create创建容器 -P分配随机端口
docker create --name mynginx2 -P nginx
#启动创建的容器 start为后台启动
docker start mynginx2

#run创建容器并启动 -d后台启动
docker run --name mynginx4 -P -d nginx

 docker run可选参数详解:

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p:指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

--name="nginx-lb":为容器指定一个名称; -

-dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--restart , 指定重启策略,可以写--restart=awlays 总是故障重启

--volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

      查看容器

#查看容器 -a查看全部容器
docker ps -a
#查看配置项详情
docker inspect mynginx4 

        进入容器

#以控制台绑定方式进入容器,这种绑定在控制台退出时可能导致容器退出
docker attach mynginx2
#进入容器 以交互方式进入容器
docker exec -it mynginx2 /bin/bash
#特权方式进入
docker exec -it -u 0:0 --privileged mynginx2 /bin/bash

         容器到镜像/文件

#提交容器变更生成新的镜像 -a指定作者 -m提交信息
docker commit -a beck -m "first commit" mynginx2 mynginx:v2

#导出容器为文件 -o指定要导出的文件 导出的文件使用docker import导入
docker export -o mynginx2.tar mynginx2
docker import mynginx2.tar mng2:v1

         宿主机与容器间文件/文件夹复制

#docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来
docker cp mynginx4:/etc/nginx/nginx.conf nginx.conf
#docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去
 docker cp index.html mynginx4:/usr/share/nginx/html

3.卷(volume)

        -v参数卷挂载/文件夹绑定

# 匿名卷挂载 自动创建volume
#docker将创建出匿名卷,并保存容器/etc/nginx下面的内容
docker run -dP -v :/etc/nginx nginx

#具名卷挂载
#docker将创建出名为nginx的卷,并保存容器/etc/nginx下面的内容
docker run -dP -v nginx:/etc/nginx nginx

#文件夹绑定
#以/开头的路径为容器宿主机绝对路径,不会自动保存容器/etc/nginx下面的内容,需要避免配置空绑定
docker run -dP -v /my/nginx:/etc/nginx nginx

        volume常用命令

#创建名称为a的卷
docker volume create a
#查看a卷的详情
docker volume inspect a
#列出所有卷
docker volume ls
#移除无用卷
docker volume prune

4. 网路(network)

        --link使用

# --link name:alias ,name连接容器的名称,alias连接的别名
# 启动mysql101
docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 
# 启动mysql可以链接到mysql101
docker run -d --link mysql01:mysql --name tomcat tomcat:7 
#验证网络
docker exec -it tomcat bash 
cat /etc/hosts 
ping mysq

 网络模式

网络模式配置说明
none模式--net=none不配置网络,用户可以稍后进入容器,自行配置
bridge模式--net=bridge默认值,在Docker网桥docker0上为容器创建新的网络
container模 式--net=container:name/id容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace
host模式--net=host容器和宿主机共享Network namespace
用户自定义--net=自定义网络用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络(推荐使用)

 网络常用命令

#创建名为mynet的网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

#查看网络列表
docker network ls
#查看网络详情
docker network inspect host

#将容器连接到自定义网络
docker network connect mynet tomcat

5. docker部署常用组件

        nginx

# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖 
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx

       mysql

# 5.7版本 docker run -p 3306:3306 --name mysql57-app \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 

#8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传, 或者chmod -R 777 /app/mysql/data
# --privileged 特权容器,容器内使用真正的root用户 docker run -p 3306:3306 --name mysql8-app \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \
-d mysql

        redis

# 提前准备好redis.conf文件,创建好相应的文件夹。如: 
port 6379 
appendonly yes 
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf 
docker run -p 6379:6379 --name redis \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.2.1-alpine3.13 \ 
redis-server /etc/redis/redis.conf --appendonly yes

        ElasticSearch

#准备文件和文件夹,并chmod -R 777 xxx #配置文件内容,参照 https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html 搜索相 关配置 # 考虑为什么挂载使用esconfig ... docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \
-v /app/es/data:/usr/share/elasticsearch/data \
-v /app/es/plugins:/usr/shrae/elasticsearch/plugins \
-v esconfig:/usr/share/elasticsearch/config \
-d elasticsearch:7.12.0

        Tomcat

# 考虑,如果我们每次 -v 都是指定磁盘路径,是不是很麻烦? docker run --name tomcat-app -p 8080:8080 \
-v tomcatconf:/usr/local/tomcat/conf \
-v tomcatwebapp:/usr/local/tomcat/webapps \
-d tomcat:jdk8-openjdk-slim-buster

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值