主頁 > 後端開發 > 【docker】基礎知識,常用命令,日常使用足夠了

【docker】基礎知識,常用命令,日常使用足夠了

2020-11-10 21:10:49 後端開發

docker基礎知識及命令

  • 1、docker安裝
  • 2、docker鏡像管理
  • 3、docker容器管理
  • 4、docker創建自定義鏡像
    • 4.1、export,把正在運行的容器直接匯出為tar包的鏡像檔案
    • 4.2、save,直接把鏡像打包出來
    • 4.3、commit,生成新的鏡像
    • 4.4、dockerfile,生成新的鏡像(最常用)
  • 5、docker容器與宿主機之間檔案共享
    • 5.1、docker與宿主機之間copy檔案
    • 5.2、docker容器卷
  • 6、Docker-Compose
    • 6.1、docker-compose介紹
    • 6.2、 實作 Docker-Compose
    • 6.3、 更多docker-compose操作
  • 7、docker網路型別
    • 7.1、同主機通信
      • 7.1.1、bridge模式
      • 7.1.2、host模式
      • 7.1.3、Container 模式
      • 7.1.4、None 模式
    • 7.2、跨主機通信
  • 8、docekr私有倉庫

1、docker安裝

yum安裝并啟動程式

[root@192 ~]# yum install docker  -y
[root@192 ~]# systemctl enable docker
[root@192 ~]# systemctl start docker

配置docker鏡像加速

[root@192 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://qegs5iwg.mirror.aliyuncs.com"]
}
[root@192 ~]# systemctl restart docker

鏡像加速獲取方法:
登錄阿里云——>產品——>容器服務ACK——>控制臺——>容器鏡像服務——>鏡像中心——>鏡像加速器,根據提示,完成鏡像加速配置(需要登錄注冊)

2、docker鏡像管理

在主機上查看當前鏡像

[root@192 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              d70eaf7277ea        2 weeks ago         72.9 MB
docker.io/mysql     latest              db2b37ec6181        2 weeks ago         545 MB
docker.io/centos    latest              0d120b6ccaa8        2 months ago        215 MB
[root@192 ~]# docker images -q   //只查看鏡像的id
d70eaf7277ea
db2b37ec6181
0d120b6ccaa8

查找想要下載的鏡像,并下載

[root@192 ~]# docker search all
[root@192 ~]# docker search centos
[root@192 ~]# docker pull docker.io/centos

查看鏡像詳情

[root@192 ~]# docker image inspect $IMAGEID

修改鏡像名字和tag,等同于 復制某個鏡像,修改名字和標簽
鏡像的名字和標簽一起用時中間加: 例如 docker.io/mysql:latest

[root@192 ~]# docker tag $imageid mycentos_nginx:7   
[root@192 ~]#docker tag $REPOSITORY:TAG centos7:ok

洗掉鏡像

# docker image rm daocloud.io/library/mysql      //使用鏡像名洗掉
# docker rmi ed9c93747fe1                        //使用id洗掉
# docker rmi docker.io/ubuntu:latest --force       //鏡像在使用中強制洗掉
# docker rmi $(docker images -q)                    //洗掉所有鏡像

如果鏡像正在被未運行的容器使用,則需要強制洗掉,但是如果正在被運行的容器使用,則強制洗掉也無法洗掉

查看鏡像制作程序,相當與dockerfile(后面說)

[root@192 ~]# docker image history library/centos
//自己做鏡像,但是做完的鏡像時間長了,我們往往會忘記對鏡像做了什么,故可以查看鏡像的制作歷史,但往往我們會通過dockerfile的方式做鏡像,簡單便捷,相當于腳本,腳本里就能看記錄,無需查看歷史,

3、docker容器管理

拉起docker容器

命令動作引數1、2、3…REPOSITORYshell命令
dockerrun-itdocker.io/centoscat /etc/hosts
dockerrun-it --namemysql/bin/bash
[root@192 ~]# docker run -it  --name test docker.io/centos /bin/bash
[root@192 ~]# docker run -it -h $remote_ip/$remote_hostname docker.io/centos /bin/bash
引數詳解:
-i   捕獲標準輸入輸出,保持互動式的意思
-t   分配一個終端或控制臺,每一個控制臺都要伴隨一個shell
-d 后臺運行容器,并回傳ID
-m 設定容器使用的記憶體
/bin/bash   容器運行起來之后運行的程式,也可以是任何的命令,
--name 給運行的容器命名
--dns-search: 指定容器主機所隸屬的域
--dns :指定 dns 服務器地址
--memory-swap 設定swap 
--cpuset-cpus="1,3" 限制容器使用的 vCPU 的 1 和 3 核心上
--blkio-weight 600 默認情況下,所有容器能平等地讀寫磁盤 , 默認為 500, 可以提高權重為 600
--device-read-bps ,限制讀某個設備的 bps ,
--device-write-bps ,限制寫某個設備的 bps ,
--device-read-iops ,限制讀某個設備的 iops ,
--device-write-iops ,限制寫某個設備的 iops
(bps 是 byte per second ,每秒讀寫的資料量,iops 是 io per second ,每秒 IO 的次數,)
--cidfile: 指定容器運行之后container長id的存放檔案位置
--restart=always:默認情況下docker重啟之后所有容器會被關閉,這個選項的意思是容器隨docker engine自啟動,
--rm   退出時就洗掉該容器,默認情況下,每個容器在退出時,他的檔案系統會保存下來,這樣一方面有利于除錯,因為可以通過查看日志等方式來確定最終狀態;另一方面,也可以保持容器所產生的資料,如果僅僅需要短暫的運行一個容器,且不需要保存容器中的資料,就可以在exit容器時自動清理掉容器及其產生的資料,

退出容器

[root@432a76428d1d /]#^p^q  //退出容器繼續運行
[root@432a76428d1d /]# exit   //退出后,容器停止作業,拉起時加--restart=always引數的容器不會停止,

停止或啟動容器

[root@192 ~]# docekr stop 容器 ID
[root@192 ~]# docekr start 容器 ID
//run是將鏡像拉起成為一個容器,未run過的容器,docker ps -a 是查不到,也就無法通過docekr start 或者docker stop進行操作

查看容器的運行狀態

[root@192 ~]# docker ps //運行中的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
f3d143546f7a        docker.io/centos    "/bin/bash"         5 seconds ago       Up Less than a second                       serene_sammet
432a76428d1d        docker.io/centos    "/bin/bash"         11 minutes ago      Up 11 minutes                               loving_tesla

[root@192 ~]# docker ps -a //所有拉起的容器
[root@192 ~]# docker ps -a -q  //查看所有容器id
[root@192 ~]# docker ps -qf status=running    //查看某種狀態的容器id 

登錄容器

[root@192 ~]# docker attach $CONTAINERID  
//回到run時的狀態,真正登錄到容器,執行exit會退出并停止容器,
[root@192 ~]# docker exec -it $CONTAINERID /bin/bash 
//exec呼叫docker命令,執行exit退出,不會停止容器,后面也可以直接加命令
[root@192 ~]# docker exec -it f3 hostname
f3d143546f7a
[root@192 ~]# docker exec f3 hostname
f3d143546f7a

洗掉容器

[root@192 ~]# docker rm $CONTAINERID
[root@192 ~]# docker rm -f $CONTAINERID    //強制洗掉運行中的容器

查看容器資訊/狀態

[root@192 ~]# docker info   //查看當前服務所有容器的資訊
[root@192 ~]# docker stats $CONTAINERID //查看cpu、記憶體、磁盤IO等狀態
[root@192 ~]# docker inspect $CONTAINERID  //查看容器詳細配置資訊,包含容器名、環境變數、運行命令、主機配置、網路配置和資料卷配置等
[root@192 ~]# docker logs $CONTAINERID    //查看日志
[root@192 ~]# docker top $CONTAINERID    //類似top
[root@192 ~]# docker diff $CONTAINERID  //查看容器內發生變化的檔案,C對應的檔案內容的改變,A對應的均是檔案或者目錄的創建洗掉
[root@192 ~]# docker events //實時輸出Docker服務器端的事件,包括容器的創建,啟動,關閉等,

4、docker創建自定義鏡像

拉起一個容器,部署想要的服務,然后再打包成鏡像,做到下次開箱即用
commit:提交容器到鏡像,實作容器持久化;
export:匯出容器和鏡像,實作容器內容持久化;
save:匯出鏡像檔案,實作鏡像內容持久化,

4.1、export,把正在運行的容器直接匯出為tar包的鏡像檔案

[root@192 ~]# docker export -o mysql_service.tar $CONTAINERID
[root@192 ~]# docker export $CONTAINERID > 315.tar

將鏡像匯入至其他服務器

[root@192 ~]# docker import 315.tar
[root@192 ~]# docker import 315.tar name:7   //匯入就加入名字和標簽

4.2、save,直接把鏡像打包出來

[root@192 ~]# docker save -o suibian.tar $REPOSITORY:$TAG

將鏡像匯入至其他服務器

[root@192 ~]# docker load <  suibian.tar 

4.3、commit,生成新的鏡像

dockercommit[OPTIONS]CONTAINER[REPOSITORY:TAG]
docker提交,生成新版本,-m 添加注釋 /-a 作者/-p,–pause=true 提交時暫停容器運行容器id/name新的鏡像名稱
[root@192 ~]# docker commit -m "ownerimage" -a "centos" 315ed84d3304 hello:v1     

以上三者的區別、額… 有大神會
https://zhuanlan.zhihu.com/p/152219012

4.4、dockerfile,生成新的鏡像(最常用)

可以將命令列的操作放到組態檔中,使用組態檔創建鏡像,

  • 準備Dockerfile檔案
[root@192 ~]# mkdir /dockerfiletest      //docker build需要指定此目錄名字
[root@192 ~]# cd /dockerfiletest
[root@192  dockerfiletest]# touch Dockerfile      //固定名字,加載時自動識別該名字
[root@192  dockerfiletest]# cat Dockerfile 
FROM daocloud.io/library/centos:6
MAINTAINER xingyao xingyao@localhost.localdomain
RUN touch /tmp/a.txt
RUN useradd xingyao
RUN echo 123 |passwd --stdin xingyao
##注釋:
FROM 基礎鏡像,存在直接使用,不存在自動下載
MAINTAINER 作者 作者郵箱
RUN 對鏡像做的后續改變 
RUN 繼續對鏡像做改變 
RUN ...
每行命令均是 INSTRUCTION statement形式,即命令+清單的模式,
命令要大寫
"#"是注解
可以將多行放到一行,使用&& 連接

更加詳細的引數可以參考大牛的鏈接
https://www.cnblogs.com/ling-yu-amen/p/10955361.html

  • 使用Dockerfile創建鏡像
[root@192  dockerfiletest]# docker build -t dockerfiletest:v1 . 
 -t:tag是標識新建的鏡像名
 "."是用來指明使用的Dockerfile檔案當前目錄的,也可用絕對路徑 
由Dockerfile檔案看出整個程序共5步,執行程序的詳細資訊會顯示在終端
[root@192  dockerfiletest]# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED              SIZE
dockerfiletest                          v1                  69728f308204        About a minute ago   194 MB

5、docker容器與宿主機之間檔案共享

5.1、docker與宿主機之間copy檔案

容器mysql中/usr/local/bin/存在docker-entrypoint.sh檔案,可如下方式copy到宿主機
[root@192 ~]#  docker cp $容器:/usr/local/bin/docker-entrypoint.sh   /root

將宿主機檔案重新copy回容器
[root@192 ~]# docker cp /root/docker-entrypoint.sh $容器:/usr/local/bin/  

5.2、docker容器卷

使用卷可以將宿主機的檔案共享到容器中,因為是共享關系,所以宿主機目錄和容器目錄中的資料是同步的,但無論是新卷還是其他容器共享的卷都只能應用給新容器,也就是在創建容器時使用卷

新卷只能在容器創建程序當中掛載

[root@docker ~]# docker run -it -v /abc:/hello $容器
[root@docker ~]# touch /abc/abc.txt
[root@71fcb0382357 /]# ls /hello/
abc.txt
-v:指定宿主機上的一個路徑:容器中的路徑,所有目錄無需新建

實際應用中可以利用多個-v選項把宿主機上的多個目錄同時共享給新建容器:

# docker run -it -v /abc:/abc -v /def:/def $容器

共享其他容器的卷:
[root@docker ~]# docker attach 71
[root@71fcb0382357 /]# ls /hello/
abc.txt
[root@docker ~]# docker run -it --volumes-from $容器1 $容器2 /bin/bash
[root@9b0ca8808591 /]# ls /hello/
abc.txt

–volumes-from:表示將71fc容器中共享的目錄也共享給這個新的容器,71fc容器掛載到哪里,新的容器就掛載到哪里

6、Docker-Compose

6.1、docker-compose介紹

Docker-Compose 專案是 Docker 官方的開源專案,負責實作對 Docker 容器集群的快速編排

  • Docker-Compose 將所管理的容器分為三層 :
    工程( project )
    服務( service )
    容器( container )
  • Docker-Compose 運行目錄下的所有檔案( docker-compose.yml , extends 檔案或環境變數檔案等)組成一個工程,
    若無特殊指定工程名即為當前目錄名,
  • 一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像,引數,依賴,
  • 一個服務當中可包括多個容器實體, Docker-Compose 并沒有解決負載均衡的問題,因此需要借助其它工具實作服務發現及負載均衡,
  • Docker-Compose 的工程組態檔默認為 docker-compose.yml ,可通過環境變數 COMPOSE_FILE或 -f 引數自定義組態檔,其定義了多個有依賴關系的服務及每個服務運行的容器,
  • 使用一個 Dockerfile 模板檔案,可以讓用戶很方便的定義一個單獨的應用容器,在作業中,經常會碰到需要多個容器相互配合來完成某項任務的情況,例如要實作一個 Web 專案,除了 Web 服務容器本身,往往還需要再加上后端的資料庫服務容器,甚至還包括負載均衡容器等,
  • Compose 允許用戶通過一個單獨的 docker-compose.yml 模板檔案( YAML 格式)來定義一組相關聯的應用容器為一個專案( project ),
  • Docker-Compose 專案由 Python 撰寫,呼叫Docker 服務提供的 API 來對容器進行管理,因此,只要所操作的平臺支持 Docker API ,就可以在其上利用 Compose 來進行編排管理,

6.2、 實作 Docker-Compose

  • 安裝 python2-pip 及 docker-compose
[root@192 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@192 ~]#  yum --enablerepo=epel -y install python2-pip
[root@192 ~]# pip install docker-compose
  • 撰寫一個 DockerFile
[root@192 file]# cat Dockerfile 
FROM centos
MAINTAINER xingyao xingyao.com
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

為什么要docker運行apache要加FOREGROUND?
因為Docker容器僅在它的1號行程(PID為1)運行時,會保持運行,如果1號行程退出了,Docker容器也就退出了,
參考:
https://www.cnblogs.com/cag2050/p/10144504.html

[root@192 file]# cat sshd 
FROM centos
MAINTAINER xingyao xingyao.com
RUN yum -y update
RUN yum -y install openssh-server
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
  • 實作 Docker-Compose
    制定一個應用配置
[root@192 file]# cat docker-compose.yml 
version: '3'
services:
  db:
    image: mariadb
    volumes:
      - /var/lib/docker/disk01:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: centos
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: centos_db
    ports:
      - "3306:3306"
  web:
    build: .
    ports:
      - "80:80"
    volumes:
      - /var/lib/docker/disk02:/var/www/html
  ssh:
    build:
      context: .
      dockerfile: sshd
    ports:
      - "2222:22"
  • 生成容器和鏡像
    關閉防火墻和selinux
[root@192 file]# docker-compose up -d
[root@192 file]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
f4096c00840b        file_web            "/usr/sbin/apachec..."   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   file_web_1
[root@192 file]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
file_ssh            latest              8a6791c952d6        8 minutes ago       281 MB
file_web            latest              72bf0c7f6dbc        18 minutes ago      285 MB
  • 測驗
# mysql -h 127.0.0.1 -u root -p -e "show variables like 'hostname';"
# mysql -h 127.0.0.1 -u centos -p -e "show databases;"
# echo "Hello xingyao" > /var/lib/docker/disk02/index.html
# curl localhost

6.3、 更多docker-compose操作

1) 顯示應用容器的狀態
# docker-compose ps
2) 顯示應用容器的 log
# docker-compose logs
3) 進入應用容器
# docker exec -it root_db_1 /bin/bash
6. docekr-compose 其他操作
4) 停止應用容器
# docker-compose stop
5) 運行一個應用容器 , 如果有依賴的容器也將被
運行
# docker-compose up -d web
6) 洗掉應用容器
# docker-compose rm

更多docker-compose學習可以參考
https://www.cnblogs.com/minseo/p/11548177.html

7、docker網路型別

7.1、同主機通信

7.1.1、bridge模式

  • 當 Docker 行程啟動時,會在主機上創建一個名為 docker0 的虛擬網橋,此主機上啟動的 Docker容器會連接到這個虛擬網橋上,虛擬網橋的作業方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網路中
  • 從 docker0 子網中分配一個 IP 給容器使用,并設定 docker0 的 IP 地址為容器的默認網關,在主機上創建一對虛擬網卡 veth pair 設備, Docker將 veth pair 設備的一端放在新創建的容器中,并命名為 eth0 (容器的網卡),另一端放在主機中,以 vethxxx 這樣類似的名字命名,并將這個網路設備加入到 docker0 網橋中,可以通過 brctl show 命令查看,
  • bridge 模式是 docker 的默認網路模式,不寫 --net 引數,就是 bridge 模式,使用 docker run -p時, docker 實際是在 iptables 做了 DNAT 規則,實作埠轉發功能,可以使用 iptables -t nat -vnL 查看,
# docker run -ti --net=bridge --name c7 centos /bin/bash

在這里插入圖片描述

7.1.2、host模式

如果啟動容器的時候使用 host 模式,那么這個容器將不會獲得一個獨立的 Network Namespace ,而是和宿主機共用一個 Network Namespace ,容器將不會虛擬出自己的網卡,配置自己的 IP 等,而是使用宿主機的 IP 和埠,但是,容器的其他方面,如檔案系統、行程串列等還是和宿主機隔離的,

# docker run -ti --net=host --name c7 myimages/centos-ip /bin/bash

在這里插入圖片描述

7.1.3、Container 模式

這個模式指定新創建的容器和已經存在的一個容器共享一個 Network Namespace ,而不是和宿主機共享,新創建的容器不會創建自己的網卡,配置自己的 IP ,而是和一個指定的容器共享 IP 、埠范圍等,同樣,兩個容器除了網路方面,其他的如檔案系統、行程串列等還是隔離的,兩個容器的行程可以通過 lo 網卡設備通信,

# docker run -ti --net=bridge --name c7 myimages/centos-ip /bin/bash

在這里插入圖片描述

7.1.4、None 模式

使用 none 模式, Docker 容器擁有自己的Network Namespace ,但是,并不為 Docker 容器進行任何網路配置,也就是說,這個 Docker 容器沒有網卡、 IP 、路由等資訊,需要我們自己為Docker 容器添加網卡、配置 IP 等,

# docker run -ti --net=none --name c7 myimages/centos-ip /bin/bash

在這里插入圖片描述

7.2、跨主機通信

直接看各位大牛寫的吧、、太多了,

  • 直路由方式
    https://www.cnblogs.com/xiao987334176/p/10049844.html
  • openvswitch方式
    https://www.cnblogs.com/openxxs/p/4690478.html
  • pipework方式
    https://blog.51cto.com/13941177/2296529
  • flannel方式
    https://www.jianshu.com/p/165a256fb1da

8、docekr私有倉庫

  • 環境準備
    client 192.168.135.161 #測驗機
    docker 192.168.135.162 #私有庫
  • 實作步驟
    拉取做私有鏡像倉庫的鏡像:
[root@docker ~]# docker pull daocloud.io/library/registry
[root@docker ~]# docker images |grep regi
daocloud.io/library/registry   latest              b2b03e9146e1        3 months ago        33.3 MB
[root@docker ~]# docker run --restart=always -d -p 5000:5000 daocloud.io/library/registry   //埠轉發:解決容器埠訪問問題   135.161訪問-->宿主機135.162的5000埠--->容器的5000埠
93395acb90b8636453974921c9742837946b07e02d883f7157f373bdd2078e25
[root@docker ~]# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
93395acb90b8        daocloud.io/library/registry   "/entrypoint.sh /e..."   5 minutes ago       Up 5 minutes        0.0.0.0:5000->5000/tcp   naughty_goldwasser

進入到私有倉庫容器中去

[root@docker ~]# docker exec -it 9339 /bin/sh       //這里是sh,不是bash,無軟連接
/ # netstat -lnp |grep :5000
tcp        0      0 :::5000                 :::*                    LISTEN      1/registry
/ # 

訪問私有倉庫

[root@docker ~]# curl -I 127.0.0.1:5000         //查看狀態碼為200
HTTP/1.1 200 OK
Cache-Control: no-cache
Date: Sun, 21 Oct 2018 07:36:11 GMT
Content-Type: text/plain; charset=utf-8

下載小鏡像buysbox上傳到私有庫

[root@client ~]# docker pull busybox
[root@client ~]# docker tag busybox 192.168.135.162:5000/busybox    //宿主機ip

[root@client ~]# docker push 192.168.135.162:5000/busybox
The push refers to a repository [192.168.135.162:5000/busybox]
Get https://192.168.135.162:5000/v1/_ping: http: server gave HTTP response to HTTPS client

如上顯示由于客戶端采用https,docker registry未采用https服務導致未上傳成功"192.168.1.100:5000"請求改為http,

解決方法:

[root@client ~]# touch /etc/docker/daemon.json
[root@client ~]# vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.135.162:5000"] }

[root@client ~]# systemctl restart docker

[root@client ~]# docker push  192.168.135.162:5000/busybox
The push refers to a repository [192.168.135.162:5000/busybox]
8a788232037e: Pushed 
latest: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527

查看私有倉庫里的所有鏡像

[root@client-161 ~]# curl  192.168.135.162:5000/v2/_catalog
{"repositories":["busybox"]}

查看更詳細的鏡像資訊:

[root@client-161 ~]# curl  http://192.168.135.162:5000/v2/busybox/tags/list

客戶端使用私有倉庫的鏡像

[root@client-161 ~]# docker pull 192.168.135.162:5000/busybox
Using default tag: latest
Trying to pull repository 192.168.135.162:5000/busybox ... 
latest: Pulling from 192.168.135.162:5000/busybox
90e01955edcd: Pull complete 
Digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5
Status: Downloaded newer image for 192.168.135.162:5000/busybox:latest
[root@client-161 ~]# docker images |grep busy
192.168.135.162:5000/busybox   latest              59788edf1f3e        2 weeks ago         1.15 MB

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/209717.html

標籤:python

上一篇:每周一看:16份檔案資料,程式員軟硬實力全概覽,總有一個適合你

下一篇:零基礎學Docker【2】 | 一文帶你快速學習Docker常用命令

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more