docker常用命令学习及遇到的问题

docker常用命令

Docker run 命令 | 菜鸟教程

Docker Dockerfile | 菜鸟教程

Docker Compose | 菜鸟教程

docker重启参数--restart=always的作用

docker重启参数--restart=always的作用_bjywxc的博客-CSDN博客_restart=always

yum install telnet.*

yum -y install net-tools.x86_64

问题
我们在创建基础容器之后,进入容器,进行编辑配置文件的时候,需要使用ifconfig,但是会出现:

bash: ifconfig: command not found
解决
使用如下命令安装:

apt install net-tools
如果执行错误,先执行一下命令:

apt-get update
 

Linux环境使用apt-get安装telnet、curl、ifconfig、vim、ping等工具【转】

https://www.cnblogs.com/east7/p/15834866.html

1、查看已安装的docker镜像:docker images
2、查看正在运行的docker镜像:docker ps
3、搜索可以安装的docker镜像:docker search mysql(例如mysql)


4、查看可以安装镜像版本:去https://hub.docker.com/search?q=&type=image上查询
5、安装官方最新镜像:docker pull mysql:版本号(例如mysql)也可以不带版本号,默认是latest
6、运行容器操作:docker run -itd --name mysql-sumengnan -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数:-e表示环境变量
-v $PWD/webapps:/usr/local/tomcat/webapps(把文件目录映射到宿主机目录)

-p:宿主机端口:容器端口

--name:容器名字
7、停止容器操作:docker stop 容器名字

8、删除容器:docker rm 容器名字
9、进入容器操作:docker  exec  -it  容器名字  /bin/bash

10、查看容器日志:docker logs 容器名字

11、查看容器中进程信息:docker top 容器名字

12、复制宿主机中的文件到容器:docker cp /root java:/root(复制宿主机root目录到docker容器java根下,并重命名为root。调换一下位置就是反向复制。源位置:目的位置)

13、导入本地镜像:cat sumengnan-3.2.6.tar.gz | docker import - sumengnan:3.2.6(镜像名自己定义)注意:镜像文件必须是tar.gz类型的文件。
14、保存镜像到本地:docker save -o sumengnan.tar(保存的文件名) sumengnan(镜像名)
15、载入镜像(再次导入镜像)docker load --input sumengnan.tar 或 docker load < sumengnan.tar
16、删除镜像:docker rmi -f image_id(镜像id,强制删除镜像)
17、删除none镜像:docker images|grep none|awk '{print $3 }'|xargs docker rmi -f

查看网络:docker network ls查

docker network详解、教程_wangyue23com的博客-CSDN博客_docker network











Dockerfile(构建镜像)

1、FROM openjdk:8-jre(基于哪个镜像)

2、COPY license.ckl /root(复制文件,复制宿主机文件到docker镜像中,可以使用通配符,如:?,*)

3、ADD license.ckl /root(复制文件:复制宿主机文件到docker镜像中,如果是压缩文件tar或其他,ADD命令会自动解压)

4、ADD /root/ /root(复制目录:复制宿主机目录到docker镜像中,把宿主机root文件夹下的内容,复制到docker的root文件夹下)

5、ENV java_version 1.8(定义环境变量,java_version=1.8,后续的指令中可以使用$java_version来引用)

6、VOLUME /tmp(挂载匿名卷到/tmp,后续可以通过docker run -v修改)

7、EXPOSE 8080(声明端口)

8、RUN apk update(在build构建过程中,要运行的命令,如更新apk包,安装某些服务等)

9、CMD java -jar /myjava.jar(镜像构建结束后要运行的程序,可以被docker run中指定要运行的程序覆盖)

构建镜像命令:docker build -t java:test .(如要构建一个叫java:test的镜像,后面有个点,指的是上下文,不能缺少)

构建镜像时不想使用缓存添加 --no-cache 参数。









24 个常见的 Docker 疑难杂症处理技巧 - 知乎

遇到的问题:

一、问题:docker pull mysql:latest下载不下来提示Pulling fs layer 


导致此问题产生,主要是因为国家把docker国外镜像hub封掉了,导致镜像pull不下来,为此,改用国内的镜像

1、执行vim /etc/docker/daemon.json 编辑文件,修改成如下内容:
{
"registry-mirrors": ["https://hub.docker.com","https://hub.daocloud.io/","https://c.163.com/hub#/m/home/","https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com","http://ef017c13.m.daocloud.io"],
"insecure-registries": ["10.0.0.12:5000"]
}

二、如何开启2375端口,提供外部访问docker?
1、修改服务文件
vim /usr/lib/systemd/system/docker.service
把文件行中修改成如下内容:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
2、重新加载docker配置
systemctl daemon-reload // 1,加载docker守护线程
systemctl restart docker // 2,重启docker
注意:生产环境禁止使用远程访问docker,容易被黑。
如非要使用则需要增加ca证书认证:参考:https://docs.docker.com/engine/security/https/。
入侵过程:
1、黑客扫描到2375端口,使用docker -H tcp://baidu.com:2375连接。
2、使用docker run -v远程启动一个容器,并映射宿主机目录到虚拟机
3、使用docker exec -it 进入容器操作,并修改宿主机authorized_keys文件。
4、加入黑客的公钥,即可达到免密码登陆服务器的效果。

三、各个docker容器之间如何通信?
1、使用容器ip(各容器每次启动会有ip)
2、使用docker run --link mysql:db(mysql是容器名称,db是别名,通过容器名称(或别名)来访问,缺点是只能单向访问)

3、使用docker run --net=host(共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。)
4、使用网桥(推荐):

  • 1、执行docker network create test-network创建网络
  • 2、执行docker run -it --network test-network --network-alias db(启动时加入test-network网络,容器取别名为db)

四、docker中没有vi或vim编辑器,甚至也没有yum和rpm命令怎么办?
可以用apt-get,先更新apt-get update,在安装vim:apt-get install vim

五、如何查看docker容器中装载的文件对应宿主机的位置?

容器启动时会返回容器id
执行:docker inspect 容器id   找到Mounts一栏,Type为volume的一项,Source属性的值就是对应宿主机的位置

六、docker build后执行docker run提示Error response from daemon: No command specified.
需要在docker run -it 后加上imageid,如:docker run -t -i 87e5b6b3ccc1 /bin/bash

七、docker build构建中使用git clone项目提示RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno

需取消ssl验证,在Dockerfile中加入如下:

RUN git config --global user.name "zhangsan"
RUN git config --global user.email "123456789@qq.com"
RUN git config --global http.sslVerify "false"

八、docker中java项目容器和mysql服务容器可以ping通,用客户端Navicat也可以连接,但是项目就是连接不上mysql
后来发现,docker pull mysql时没有加版本号,就自动拉取了lastet最新版的mysql。

因为mysql版本太高,java项目的jdbc驱动无法连接高版本mysql,这就解释了为什么Navicat可以连接,java项目却不能连接的原因。
最终解决:改成低版本的mysql如:5.7

九、docker中mysql连接表名大小写敏感
在mysql配置文件my.cnf中添加lower_case_table_names=1(需要先安装vim编辑器或docker cp到宿主机修改完再cp回来)

完美解决Cannot connect to the Docker daemon at tcp://localhost:4243. Is the docker daemon running?

完美解决Cannot connect to the Docker daemon at tcp://localhost:4243. Is the docker daemon running?_腊肉Naro的博客-CSDN博客

运行两个不同版本的mysql

docker run -d -p 80:80 httpd

root@iZbp1i561992iw7ww9i030Z ~]# docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
64a4cd3019fc2e11c3dc1056b8bf1c7bb84f66dfb99e065e7d0e557823c50b62

[root@iZbp1i561992iw7ww9i030Z ~]# docker exec -it 64a4cd3019fc2e11c3dc1056b8bf1c7bb84f66dfb99e065e7d0e557823c50b62 /bin/sh
# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

docker run -d --name mysql2 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
2c668f75491c6f638d8a123e2cc7090827beca20363c642319f4771ff5a76354

Docker之容器退出(实战)_天涯芳草-CSDN博客_docker 退出容器

Docker:Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别

Docker:Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别_netyeaxi的专栏-CSDN博客

docker run -d -p 8080:8080 tomcat 


[root@iZbp1i561992iw7ww9i030Z ~]# docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat            latest              6313f84af805        3 days ago          680 MB
docker.io/httpd             latest              5ebe6e00baf9        2 weeks ago         138 MB
docker.io/mysql             5.7                 1d7aba917169        5 weeks ago         448 MB
docker.io/mysql             latest              0716d6ebcc1a        5 weeks ago         514 MB
docker.io/rancher/rancher   v2.4.3              ddb8c914dee4        17 months ago       849 MB
docker.io/rancher/server    stable              98d8bb571885        17 months ago       1.08 GB
docker.io/tomcat            7-jre7              47c156f4d4e3        2 years ago         359 MB
[root@iZbp1i561992iw7ww9i030Z ~]# docker run -d -p 8080:8080 tomcat:7-jre7
b9ebbe04c77bee443786ae4d904ea037a992e9d81e6fd228920a7fe83f1b9573

docker run -d -p 8081:8081 rancher/server:stable
afc74f6c3d7346312569e681f20e39167c116e04aef3fe5cb0fcbd7dda1d7323

rancher 页面显示有点问题

SecureCRT 访问本地Linux虚拟机NAT网络(VMware workstation 9+secureCRT+Ubuntu12.04) - babi - 博客园

VMware 如何通过现有虚拟机克隆新的虚拟机 (图文)_yigongye-CSDN博客_虚拟机克隆

sh -c的必要性

sh -c的必要性_BobChill的博客-CSDN博客

Linux下touch命令的使用

Linux下touch命令的使用 - Hackerman - 博客园

dockerfile中RUN bash -c 'touch /app.jar'

从命令本身看,是为了执行一个touch命令,前面的add命令把jar复制过去,后面touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值