前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker常用命令总结

docker常用命令总结

作者头像
栖西
发布2023-10-17 08:20:51
2000
发布2023-10-17 08:20:51
举报
文章被收录于专栏:栖西栖西

docker

应该早点学习docker的,真的特别好用。

使用最重要的就是清楚端口映射

代码语言:javascript
复制
例如:docker run -d -p 8080:8080 tomcat
代码语言:javascript
复制
个人开启docker之后的常用命令
docker ps -aq
docker ps
docker start mysql57
docker exec -it 容器id bash
1、安装

个人推荐使用第二种方式,第一种安装方式安装的是 1.13.1 的版本,第二种安装的是最新版,我今天安装完之后是 20.10.8 版本。

代码语言:javascript
复制
第一种安装方式:
yum install docker -y

Dokcer hub镜像加速
/etc/docker/daemon.json
{"registry-mirrors":["https://gg3gwnry.mirror.aliyuncs.com"]}

第二种安装方式:

需要的安装包
yum install -y yum-utils

设置镜像的仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
更新yum软件包
yum makecache fast

安装社区版
yum install docker-ce docker-ce-cli containerd.io   

可以配置一个阿里云加速镜像 加快下载速度
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://a5pog71k.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

测试

代码语言:javascript
复制
显示出版本信息  测试一下就可以了
docker version	(或者输入 docker -v 或者 docker --version)
查看docker系统信息
docker info
查看所有帮助命令
docker
查看某个命令的帮助信息  (command 例如:docker run --help)
docker commond --help 

启动

代码语言:javascript
复制
启动docker
systemctl start docker

停止docker
systemctl stop docker

重启docker
systemctl restart docker

查看docker运行状态
systemctl status docker

查看docker进程
ps -ef | grep docker

设置docker开机自启动
systemctl enable docker

设置容器开机自动启动
创建容器时,设置自动启动容器
docker run --restart=always 容器id(或者容器名称)

如果创建时未指定 --restart=always ,可通过update 命令设置
docker update --restart=always  容器id(或者容器名称)
2、镜像命令
代码语言:javascript
复制
查看下载的镜像
docker images

只查看镜像id
docker ps -aq

搜索镜像
docker search tomcat

搜索镜像,收藏数大于3000的
docker search mysql --filter=STARS=3000

下载镜像   默认最新版本   docker pull 镜像名[:tag] 
docker pull mysql

下载mysql5.7
docker pull mysql:5.7

删除镜像 空格删除多个容器
docker rmi -f 镜像id

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

保存新镜像,这样每次修改完 数据都还在,可理解为Linux的快照
docker commit 容器id 镜像名
比如:docker commit es48s4ds5se mysql0812
3、容器命令
代码语言:javascript
复制
下载一个centos进行学习
docker pull centos

新建容器并启动
docker run [可选参数] image

# 参数说明
--name="Name"	容器名字,用来区分容器
-d				后台启动
-it				使用交互式运行
-p				指定容器端口	8081:8080
	-p  ip:主机端口:容器端口
	-p	主机端口:容器端口 常用
	-p  容器端口
	容器端口
-P				随机指定端口

列出所有运行的容器
docker ps
-a		正在运行的容器
-n=?	显示个数  最近创建的容器
-q		只显示id

查询启动的容器id
docker ps -aq

启动并进入centos容器
docker run -it centos /bin/bash

退出
exit		# 直接容器停止并退出
Ctrl +P +Q  # 容器不停止退出

删除指定容器
docker rm 容器id

删除所有容器
docker rm -f $(docker ps -aq)

管道符删除  删除所有
docker ps -a -q|xargs docker rm

启动容器  一般启动的时候都会进行端口映射(docker run -d -p 8080:8080 tomcat)
docker start 容器id

查看容器的更多信息
docker inspect 容器id/名称

进入docker容器(71858d5c1af9   容器id,最后的那个/bin/bash可以直接写 bash)
docker exec -it 71858d5c1af9 /bin/bash

重启容器
docker restart 容器id

停止容器
docker stop 容器id

停止全部运行中的容器
docker stop $(docker ps -q)

停用并删除容器
docker stop $(docker ps -q) & docker rm -f $(docker ps -aq) 

强制停止当前容器
docker kill 容器id
4、其他命令
代码语言:javascript
复制
后台启动  -d
docker run -d 镜像名

查看日志
docker logs -f -t --tail 容器id
-tf 	显示日志
--tail n 显示多少行

查看容器中的进程信息
docker top 容器id

查看容器详细信息	元数据
docker inspect 容器id

进入当前运行的容器
方式1: docker exec -it 容器id bash
方式2: docker attach 容器id     (它进入的是正在运行的窗口,正在执行)
区别:
exec    进入容器是一个新的终端
attach  不会启动新的进程

拷贝文件到主机
docker cp 容器id:容器内路径 主机的路径

查看CPU使用率
docker stat
5、使用案例
nginx
代码语言:javascript
复制
下载nginx镜像
docker pull nginx
启动nginx   
docker run -d --name nginx01 -p 5555:80 nginx
参数解释:
-d			代表后台启动
--name  	相当于别名
-p			端口映射	第一个是Linux的端口,第二个是容器的端口
测试本机访问,然后再去浏览器访问
curl localhost:3344
tomcat
代码语言:javascript
复制
下载镜像
docker pull tomcat
启动镜像
docker run -d -p 8081:8080 tomcat
zookeeper
代码语言:javascript
复制
安装Zookeeper,开发分布式dubbo项目Zookeeper作为注册中心试验
下载镜像
docker pull zookeeper

启动
docker run -p 2181:2181 -d zookeeper

进入容器
docker exec -it 容器id bash

window可以使用客户端工具访问Zookeeper

zookeeper图形化的客户端工具(ZooInspector)
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
6、mysql数据持久化
代码语言:javascript
复制
安装mysql  如果不指定版本默认就是8.x的版本,
docker pull mysql:5.7

启动mysql
docker run -p 3306:3306 -e MYSQL_DATABASE=mytest-e
MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

参数解读:
-p  端口映射
-e  环境变量
-d  后台启动
进入容器
docker exec -it ID号 bash
配置文件映射、数据库文件映射
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql
 -e MYSQL_ROOT_PASSWORD=145263 --name mysql57 mysql:5.7
参数解释:
-d 		后台运行
-p 		端口映射
-v 		卷挂载
-e 		环境配置
--name 	容器名字

以后在启动的时候直接 (方便又快捷)
docker start mysql57 

 因为这个是mysql5.7的版本,使用Navicat测试,直接就连上了
 
mysql 8.x版本需要的配置

docker pull mysql

启动mysql
docker run -p 3306:3306 -e MYSQL_DATABASE=test-e
MYSQL_ROOT_PASSWORD=123456 -d mysql

进入容器
docker exec -it ID号 bash

登录mysql
mysql -u root -p

修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '145263';

授权远程登录访问
CREATE USER 'ligang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

GRANT ALL PRIVILEGES ON*.* TO 'zhangsan'@'%';

设置root密码永不过期
alter user 'root'@'%' identified by '145263' password expire never;

修改加密方式
 alter user 'root'@'%' identified with mysql_native_password by '123456';
 
刷新权限
flush privileges;
7、jar包部署

方式1

代码语言:javascript
复制
1、定义一个Dockerfile文件
FROM java
MAINTAINER zhangsan
ADD demo-1.0.0.jar /opt
RUN chmod +x /opt/demo-1.0.0.jar
CMD java -jar /opt/demo-1.0.0.jar
2、构建镜像
 docker build -t demo-1.0.0.jar .
3、运行容器: (8ed7368ff4c1) id号   
端口映射: docker run -d -p 8080:8080 8ed7368ff4c1
4、测试
curl localhost 8080

方式2

代码语言:javascript
复制
1、定义一个Dockerfile文件
FROM  java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
2、构建镜像
docker build -t xiaolizi .
3、运行容器  xiaolitest666 相当于容器的别名  xiaolizi 是镜像的名字
docker run -d -p 8080:8080 --name xiaolitest666 xiaolizi
4、测试
curl localhost 8080

部署war包

代码语言:javascript
复制
1、定义Dockerfile文件
FROM tomcat
MAINTAINER zhangsan
ADD demo-1.0.0.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD /usr/local/tomcat/bin/catalina.sh run
2、构建镜像
docker build -t demo-1.0.0.war .
3、运行镜像
docker run -d -p 8080:8080 7d8bb560d486
4、访问的时候加项目访问路径:demo-1.0.0

参数解释

命令

效果

FROM

基础镜像:Centos/Ubuntu/Java

MAINTAINER

镜像作者

RUN

镜像构建的时候需要运行的命令

ADD

为镜像添加内容(压缩包)

COPY

类似于ADD,将文件拷贝到镜像中

EXPOSE

暴露端口

CMD/ENTRYPOINT

指定这个容器启动时要运行的命令(CMD替代先前命令,ENTRYPOINT在先前命令后追加)

8、自定义镜像
代码语言:javascript
复制
自定义JDK镜像  这个文件名是固定的,D大写
1、创建 Dockerfile 文件,写入配置信息(vim Dockerfile)
FROM centos:latest
MAINTAINER zhangtest
ADD jdk-8u241-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_241
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java-version

2、构建镜像
docker build -t zhango_jdk1.8.0_241 .
3、然后可以查看到自己的镜像
docker images
4、运行镜像就可以显示出JDK版本信息
docker run -d 容器id

解读

代码语言:javascript
复制
FROM
格式为 FROM<image> 或 <image>:<tag>
Dockerfile文件的第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,
可以使用多个FROM指令(每个镜像一次);

MAINTAINER
格式为MAINTAINER<name>,指定维护者信息

ENV
格式为ENV<key><value>,指定一个环节变量,会被后续RUN指令使用,并在容器运行时保持

ADD
格式为ADD<src><dest> 复制到指定的<src>到容器中的<dest>

EXPOSE
格式为EXPOSE<port><port>...
告诉Docker服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过-p映射端口,
Docker主机会自动分配一个端口转发到指定的端口

RUN
格式为RUN<command>
RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用\来换行

CMD
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。
如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令
可能遇到的错误

Error response from daemon: Cannot restart container 1740d55e9f32: driver failed programming external connectivity on endpoint mysql57 (1dd8cc83f8a80b632e05663f9e4757ce0af69bb6acf6ed8456a65afc88d46746): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3310 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1))

代码语言:javascript
复制
定位问题:docker服务启动时定义的自定义链DOCKER被清除
重启docker即可
systemctl restart docker
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker
    • 1、安装
      • 2、镜像命令
        • 3、容器命令
          • 4、其他命令
            • 5、使用案例
              • nginx
              • tomcat
              • zookeeper
            • 6、mysql数据持久化
              • 7、jar包部署
                • 8、自定义镜像
                  • 可能遇到的错误
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档