Docker使用入门

Docker安装 - 穷酸秀才大艹包 - 博客园 (cnblogs.com)

 

Docker命令:

docker images 查看本地镜像
docker ps -a 查询容器
docker ps -l 查询最近使用容器
docker rm CONTAINER_ID 删除容器
docker rmi IMAGE_ID 删除镜像
docker cp [OPTIONS] SRC_PATH CONTAINER_ID:DEST_PATH 上传文件/文件夹
docker cp [OPTIONS] CONTAINER_ID:SRC_PATH DEST_PATH 下载文件/文件夹
docker start CONTAINER_ID 启动容器
docker stop CONTAINER_ID 退出容器
docker exec -it CONTAINER_ID /bin/bash 进入容器
docker kill CONTAINER_ID 强制退出容器
docker attach CONTAINER_ID 登录已启动容器
docker commit CONTAINER_ID xxxx/xxxxx[:xx] 保存对容器的修改
docker inspect CONTAINER_ID 查看容器的信息
Ctrl+D 退出且关闭容器
Ctrl+P, Q 退出但不关闭容器
docker save -o xxx.tar myimage:latest 保存镜像到本地
docker load -i xxx.tar 加载本地镜像

 

docker run命令详解

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • --attach, -a: 指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项;

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

  • --dns x.x.x.x: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • --env, -e username="xxx": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --expose=[]: 开放一个端口或一组端口;

  • --hostname, -h "xxx": 指定容器的主机名;

  • --interactive, -i: 以交互模式运行容器,通常与 -t 同时使用;即使未连接,也要保持STDIN打开;

  • --link=[]: 添加链接到另一个容器;

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

  • --name="xxx": 为容器指定一个名称xxx;

  • --net: 指定容器的网络连接类型,支持bridge/host/none/container:<name|id>四种类型;

  • --publish, -p: 端口映射,格式为:主机(宿主)端口:容器端口;

  • --privileged: 使容器内的root拥有真正的root权限,否则只是外部的一个普通用户权限;
  • --tty, -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;分配一个伪TTY;

  • --gpus: 在Docker中指定GPU卡,例如all、"device=1"、'"device=0,2"';
  • -v:本地host的文件(文件夹)映射到容器内的文件(文件夹),例如[宿主机目录]:[映射到宿主机上的目录]

docker run -it -p xxxx:xxxx xxx/xxx /bin/bash

 

docker search命令详解

docker search [OPTIONS] TERM

OPTIONS说明:

  --automated:只列出automated build类型的镜像;

  --no-trunc:显示完整的镜像描述;

  -f <过滤条件>:列出收藏数不小于指定值的镜像。

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像:

docker search -f stars=10 java

 

docker容器间通讯:

1、创建Docker网络:首先,需要创建一个Docker网络,以便让两个容器能够在同一网络中通信。可以使用docker network create命令创建一个bridge网络

docker network create my-network

2、运行容器A:运行容器A并将其连接到上面创建的网络

docker run -d --name container-A --network my-network image-A

3、运行容器B:运行容器B并将其连接到上面创建的网络

docker run -d --name container-B --network my-network image-B

在容器B中可以使用http://container-A:[port]/来访问容器A中的服务 

 

docker rm失败——容器处于dead状态:

根据docker rm失败产生的最后一串由字母与数字组成的字符串s,在命令行中输入grep [s]找到相关进程pid,然后kill [pid]。

最后再次grep [s],如果没有相关进程显示,即可以正常docker rm删除容器。

 

docker golang镜像使用:

docker run -it -p 8080:8080  docker.io/golang bash # 根据golang镜像产生一个新容器

docker run -it -p 8080:8080 -v /root/golang/go:/go -v /root/golang/code:/code --privileged docker.io/golang bash # 把本地目录映射到容器中

容器中的web应用监听的是容器端口,不同容器可以映射相同的容器端口,但是宿主机监听端口不能重复。

 

docker配置redis服务:

docker pull redis

docker run -it -p 56379:6379 docker.io/redis /bin/bash

exit

dokcer ps -l

docker exec -d CONTAINER_ID redis-server

 

docker配置mysql服务:

docker run -e MYSQL_ROOT_PASSWORD=123456 -p 53306:3306 -d docker.io/mysql

如果发现在容器中可以连接上数据库,而Navicat 远程连接docker容器中的mysql出现报错1251 - Client does not support authentication protocol

解决办法:https://blog.csdn.net/sinat_38345188/article/details/80838098

 

docker后台运行go webapi:

docker start webapi1
docker start webapi2
docker exec -d webapi1 bash -c "cd ../code/main && go run *.go"
docker exec -d webapi2 bash -c "cd ../code/main && go run *.go"

 

docker配置nginx服务:

docker run -it -p 80:80 docker.io/nginx bash
cd etc/nginx
vim nginx.conf

在http段加入以下代码

upstream 192.168.200.3{

  server 192.168.200.3:8081;

  server 192.168.200.3:8082;

}

cd conf.d

在etc/nginx/conf.d中运行vim default.conf

location / {  

   proxy_set_header Host $host;

   proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

   root /usr/share/nginx/html;

   index index.html index.htm;

   proxy_pass http://192.168.200.3;

}

重新启动nginx服务即可。

 

docker获取容器root权限

第一步:查看容器的CONTAINER ID

docker ps # 需要运行中的容器

第二步:获取root权限,例如需要进入的CONTAINER ID为2209371edd48

docker exec -ti -u root 2209371edd48 bash

posted on 2018-08-15 15:17  穷酸秀才大草包  阅读(215)  评论(0)    收藏  举报

导航